栈实现表达式求值

栈实现表达式求值

使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。
输入格式:
【栈实现表达式求值】输入正确的表达式(可以有空格)后回车,得到后缀表达式和结果。输入括号缺失的表达式,输出"ERROR:缺少括号"。输入两个除括号外运算符连续的表达式,输出"ERROR:表达式缺操作数"。
输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
输入样例:
在这里给出一组输入。例如:

5*(8-(3+2))

结尾无空行 输出样例:
在这里给出相应的输出。例如:
5832+-* 15

结尾无空行 代码如下:
#include #include #include #include #include using namespace std; stack MoveIn; stack CharStack; string fixStr = ""; void IntoPost(string inStr); bool isPush(char pre, char late); void Calculate(char np); void CalFix(); void pushChar(char np); string format(string inStr) {//解决(-1+2)负数报错问题 for (int i = 0; i < inStr.length(); i++)//即在 -1 前面加一个0 变成0-1 即可 if (inStr[i] == '-') if (i == 0) inStr.insert(0, 1, '0'); else if (inStr[i - 1] == '(') inStr.insert(i, 1, '0'); return inStr; } int main(){ string inStr; getline(cin, inStr); //使用getline 解决字符串录入遇空格结束的问题类似 ( a + b ) 只写入了 ( 的inStr = format(inStr); int i=0; int K_num=0; int K_1=0; int K_2=0; while(inStr[i]!='\0') {if(inStr[i]=='('||inStr[i]==')') {K_num++; } if(inStr[i]=='+'||inStr[i]=='-'||inStr[i]=='*'||inStr[i]=='/') {if(inStr[i+1]=='+'||inStr[i+1]=='-'||inStr[i+1]=='*'||inStr[i+1]=='/') { K_1=1; printf("ERROR:表达式缺操作数"); }} i++; } if(K_num%2!=0) { K_2=1; printf("ERROR:缺少括号"); } if((K_1==0)&&(K_2==0)) {IntoPost(inStr); cout<

    推荐阅读