资源简介
用dev c++写的代码,附有啰里啰嗦的注释和测试样例。太简单了不好意思要分。
代码片段和文件信息
#include //中缀表达式转后缀表达式
#include //通过使用栈暂存运算符,实现运算符位置的调整
#include //tips: 中缀表达式即常见的表达式,可以用二叉树表示。对该二叉
#include //树进行后序遍历可以得到后缀表达式(逆波兰表达式)。
#include
using namespace std;
bool isOperand(char c); //判断是否为操作数(变量)
bool isOperator(char c); //判断是否为操作符(运算符)
bool isHigherOperator(char achar b); //判断操作符a的优先级是否高于b
string generalToRvsPolish(string expression);//将中缀表达式转为后缀表达式
int main()
{
while(true)
{
string expression; //变量由单个字母表示,运算符仅限+-*/()
getline(cinexpression); //中间空格不影响结果
string rvsPolishNotation=generalToRvsPolish(expression);
cout< }
return 0;
}
bool isOperand(char c)
{
if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
return true;
else
return false;
}
bool isOperator(char c)
{
if(c==‘+‘||c==‘-‘||c==‘*‘||c==‘/‘||c==‘(‘||c==‘)‘)
return true;
else
return false;
}
bool isHigherOperator(char achar b) //a大于b为true,a小于等于b为false
{
if(a==‘(‘||b==‘(‘) //左括号无优先级,可视为既与+-的优先级相同,又与*/的优先级相同
return true;
else if(b==‘*‘||b==‘/‘)
return false;
else if(a==‘*‘||a==‘/‘)
return true;
else
return false;
}
string generalToRvsPolish(string expression)
{
int len=expression.length();
char* rvsPoCharArray=new char[len]; //暂存后缀表达式的char数组
int j=0; //rvsPoCharArray当前处理的位置下标
stack operatorStack; //暂存操作符的栈,栈中始终保持上面的操作符的优先级高于下面的操作符,这是实现调整的关键
for(int i=0;i {
//cout<<“cur: “<pression[i]< if(isOperand(expression[i])==true) //若为操作数直接输出到rvsPoCharArray
{
rvsPoCharArray[j]=expression[i];
j++;
}
if(isOperator(expression[i])==true) //字符为操作符,进行必要的调整
{
if(operatorStack.empty()==true) //栈为空的情况:操作符直接入栈(若
相关资源
- VC关联指定后缀名和打开程序
- 用C++栈写的中缀表达式求解
- 字符串前后缀添加功能
- C++中缀表达式求值
- 栈实现中缀表达式到后缀表达式的转
- C语言之逆波兰表达式完整代码(附算
- 表达式求值求后缀c语言
- c语言实现中缀表达式转后缀并求值
- C语言:中缀算术表达式求值栈 附答案
- 中缀表达式变后缀表达式的求值
- MFC(C++)程序与文件关联后缀名含C
- 中缀表达式求值(C++ 含合法性检查,
- 输入一个中缀表达式,将其转换为等
- 后缀表达式求解
- c++实现中缀变后缀表达式
- MFC获取电脑文件夹下文件的名称,类
- 基于c的算术四则表达式转换为逆波兰
- 后缀式转中缀式C语言
- 中缀表达式转后缀表达式源程序二叉
- C++:中缀表达式转变为逆波兰表达式
- 转化为逆波兰表达式
- 基于栈结构的中缀表达式求值实验报
- 逆波兰表达式的C++实现
- 数据结构——中缀表达式计算
评论
共有 条评论