
中缀转后缀 逆波兰表达式求值
发布日期:2021-05-06 17:49:04
浏览次数:10
分类:技术文章
本文共 1779 字,大约阅读时间需要 5 分钟。

逆波兰表达式求值
-
判断是数字还是运算符, 如果是数字, 求出数字的值后入栈.
-
如果是运算符,从栈中出栈两个数字, 用后出栈的数与前出栈的数根据运算符运算, 再把得到的值入栈.
可能这句话不太好理解, 如过先出栈的为num1, 后出栈的是num2, 运算符为减号时, 新的数 num3 = num2 - num1.
#includeusing namespace std;string s;stack s1, s2;int getrank(char c){ if(c == '*' || c == '/') return 2; else return 1;}void work(){ //cin >> s; int l = s.length(); for(int i = 0; i < l; ++i) { if(s[i]>='0' && s[i] <= '9') s2.push(s[i]); else if(s[i] == '(') s1.push(s[i]); else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/') { if(s1.empty() || s1.top() == '(') s1.push(s[i]); else if(getrank(s[i]) > getrank(s1.top())) s1.push(s[i]); else { while(!s1.empty() && s1.top() != '(' && getrank(s[i]) <= getrank(s1.top())) { s2.push(s1.top()); s1.pop(); } if(s1.empty() || s1.top() == '(' || getrank(s[i]) > getrank(s1.top())) s1.push(s[i]); } } else // s[i] 是 ')' { while(!s1.empty() && s1.top() != '(') { s2.push(s1.top()); s1.pop(); } if(!s1.empty()) s1.pop();// 把 '(' pop掉 } } vector v; while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } while(!s2.empty()) { v.push_back(s2.top()); s2.pop(); } //for(int i = v.size() - 1; i >= 0; --i) //cout << v[i] << " "; cout << endl; // 以上是中缀转后缀 stack s3;// 求解逆波兰表达式 for(int i = v.size() - 1; i >= 0; --i) { if(v[i]>='0'&&v[i]<='9') s3.push((double)v[i]-'0'); else { double x = s3.top();s3.pop(); double y = s3.top();s3.pop(); if(v[i]=='+') s3.push(x+y); else if(v[i]=='-') s3.push(y-x); else if(v[i]=='*') s3.push(x*y); else s3.push(y/x); } } printf("%d\n",(int)s3.top());}int main(){ while(cin >> s) work(); return 0;}// (2+7-8/4)+(7-3+8*2)// 2 7 + 8 4 / - 7 3 - 8 2 * + +// 1+((2+3)*4)-5// 1 2 3 + 4 * + 5 -
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月25日 08时14分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
springcloud学习:rpc和http的区别,各自的优缺点
2019-03-03
java进程、线程知识扩充
2019-03-03
vue项目中报/sockjs-node/info错误
2019-03-03
如何处理前任程序员留下的代码
2019-03-03
来自投资银行的20个Java面试题
2019-03-03
20个非常有用的Java程序片段
2019-03-03
Dubbo架构设计详解
2019-03-03
如何锻炼JAVA编程思路?
2019-03-03
Mybatis源码分析(四):属性接口之objectFactory
2019-03-03
全面了解 Nginx 主要应用场景
2019-03-03
【系统日志】log4j配置学习总结
2019-03-03
2019年1月已到,Java 8 要收费了吗?
2019-03-03
最全的spring面试题和答案
2019-03-03
CentOS 8 已下载ntpdate 却无法使用crond进行时间同步
2019-03-03
坑啊,Spring的BeanUtils是这样用的,为啥会出bug?
2019-03-03
Mybatis的这些坑!把我坑惨了!
2019-03-03
在 IntelliJ IDEA 中使用 Git,太方便了!
2019-03-03
一个女生不主动联系你还有机会吗?
2019-03-03
7 个显著提升编码效率的IntelliJ IDEA必备插件
2019-03-03
企业API接口设计之token、timestamp、sign具体实现
2019-03-03