表达式计算的中序转后序
2011-12-26 17:44
197 查看
计算表达式 (A*B+(C+D))-(E*F*H)
这种表达式如果是人来做,非常容易,但对于程序来说,有些困难,但如果转换成后序表达式AB*CD++EFH**-,那么程序就舒服多了
转换的过程并不难,我们使用一个栈,将要转换的表达式中的字符逐个检查,如果字符不是运算符,即是字母,那么我们就讲这个字符放入到新的表达式中,如果是运算符,那么我们只要遵循以下原则即可
1.如果要放入的运算符的运算级别低于栈顶的运算符,那么就将栈顶的运算符弹出,放入到新的表达式,重复这个动作直到栈顶的运算符运算优先级低于或等同于我们要放入栈中的运算符的优先级
2.如果是左括号,不做操作,如果是又括号,那么就将栈中的栈顶弹出放入到新的表达式,重复这个动作,直到将左括号弹出,但是括号不要放入到新的表达式中
3.其他情况下,直接入栈
4.逐个检查结束后,将栈中剩余的运算符弹出,放入到新的表达式中
下面是程序
这种表达式如果是人来做,非常容易,但对于程序来说,有些困难,但如果转换成后序表达式AB*CD++EFH**-,那么程序就舒服多了
转换的过程并不难,我们使用一个栈,将要转换的表达式中的字符逐个检查,如果字符不是运算符,即是字母,那么我们就讲这个字符放入到新的表达式中,如果是运算符,那么我们只要遵循以下原则即可
1.如果要放入的运算符的运算级别低于栈顶的运算符,那么就将栈顶的运算符弹出,放入到新的表达式,重复这个动作直到栈顶的运算符运算优先级低于或等同于我们要放入栈中的运算符的优先级
2.如果是左括号,不做操作,如果是又括号,那么就将栈中的栈顶弹出放入到新的表达式,重复这个动作,直到将左括号弹出,但是括号不要放入到新的表达式中
3.其他情况下,直接入栈
4.逐个检查结束后,将栈中剩余的运算符弹出,放入到新的表达式中
下面是程序
bool Express::TransferExpress(string strExpress,string& newExpress){ char ch='0'; stack<char> ExpressStack; if(strExpress=="") { return false; } for(int i=0;i<strExpress.length();i++) { ch=strExpress.at(i); switch(ch) { case '+': { while((!ExpressStack.empty())&&(ExpressStack.top()=='*'||ExpressStack.top()=='/')) { char pop=ExpressStack.top(); newExpress.append(1,pop); ExpressStack.pop(); } ExpressStack.push(ch); break; } case '-': { while((!ExpressStack.empty())&&(ExpressStack.top()=='*'||ExpressStack.top()=='/')) { char pop=ExpressStack.top(); newExpress.append(1,pop); ExpressStack.pop(); } ExpressStack.push(ch); break; } case '*': { ExpressStack.push(ch); break; } case '/': { ExpressStack.push(ch); break; } case ')': { while((!ExpressStack.empty())&&ExpressStack.top()!='(') { char pop=ExpressStack.top(); newExpress.append(1,pop); ExpressStack.pop(); } ExpressStack.pop(); break; } case '(': { ExpressStack.push(ch); break; } default: { newExpress.append(1,ch); break; } } } while(!ExpressStack.empty()) { char pop=ExpressStack.top(); newExpress.append(1,pop); ExpressStack.pop(); } cout<<newExpress<<endl; return true; }
相关文章推荐
- 表达式计算的中序转后序
- 表达式计算(中序转后序)
- 中序表达式转后序(计算版)
- 中序表达式转成前序表达式和后序表达式及其计算方法
- 中序表达式的直接计算
- Java栈实现括号匹配、中序转后序表达式、中序表达式直接计算
- 了解中序表达式的表示法与计算方法 (转)
- 中序表达式的表示法与计算方法
- 中序表达式->逆波兰式->计算结果
- 算术表达式的计算(C#)
- 华为2012校招成都站8:00最后一题,表达式计算源代码
- 计算表达式
- 表达式计算
- 使用栈的表达式计算程序_arith_expr.h__
- 字符串转换为计算表达式
- 1005. 后缀表达式计算
- 输入一个字符串表达式,输出计算结果
- 表达式计算
- 计算表达式的值
- 题目29:计算表达式