首页 > 代码库 > STL栈的应用之表达式求值
STL栈的应用之表达式求值
#include<iostream> #include<cstring> #include<cstdio> #include<stack> using namespace std; /************* *计算 *************/ int operate(int a, char op, int b ){ if(op == '+') return a+b; else if(op == '-') return a-b; else if(op == '*') return a*b; else if(op == '/') return a/b; } /************** *比较优先级 **************/ char precede(char a, char b){ if(a=='+' || a=='-'){ if(b=='*' || b=='/' || b=='(') return '<'; else if(b==')' || b=='+' || b=='-' || b=='#') return '>'; } else if(a=='*' || a=='/'){ if(b=='(') return '<'; else if(b=='+' || b=='-' || b=='*' || b=='/' || b==')' || b=='#') return '>'; } else if(a=='('){ if(b=='+' || b=='-' || b=='*' || b=='/' || b=='(') return '<'; else if(b==')') return '='; } else if(a==')'){ if(b=='+' || b=='-' || b=='*' || b=='/' || b=='#' || b==')') return '>'; } else if(a=='#'){ if(b=='+' || b=='-' || b=='*' || b=='/' || b=='#' || b=='(') return '<'; } } /********************** *判断是否为数字字符 **********************/ bool judge(char a){ if(a>='0' && a<='9')return true; else return false; } /*************** *Main函数 ***************/ int main() { stack<int>op_n; stack<char>op_s; char str, ans; int num = 0; bool flag = false; op_s.push('#'); cin >> str; while(str!='#' || op_s.top()!='#'){ if(judge(str)){ flag = true; num = num*10 + (str-'0'); /*处理多位数数据*/ cin >> str; }else{ if(flag){ flag = false; op_n.push(num); num = 0; } ans = precede(op_s.top(), str); if(ans == '<'){ op_s.push(str); cin>>str; } if(ans == '='){ op_s.pop(); cin >> str; } if(ans == '>'){ int a;int b;char c; b = op_n.top();op_n.pop(); a = op_n.top();op_n.pop(); c = op_s.top();op_s.pop(); cout << a << ' ' << c << ' ' << b << endl; op_n.push( operate(a, c, b) ); } } } cout << op_n.top() << endl; return 0; }
STL栈的应用之表达式求值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。