51-表达式计算(带括号的)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;int bijiao(char x){switch(x){case '+': return 1;case '-': return 1;case '*': return 2;case '/': return 2;case '(': return -1;case '#': return 0;}return 0;
}int f(string str){int ans = 0;stack <char> cst;stack <int> ist;str += '#';cst.push('#');int i = 0, len = str.length();while(i < len){if(str[i] >= '0' && str[i] <= '9'){int sum = 0;while(str[i] >= '0' && str[i] <= '9'){sum = sum * 10 + (str[i] - '0');i++;}if(cst.top() == '-'){ //将减号换为加一个负数 cst.pop();cst.push('+');sum = -sum;}ist.push(sum);}if(str[i] == '('){cst.push(str[i]);i++;}else if(str[i] == ')'){while(cst.top() != '('){ //一直碰到左括号结束 char ch;ch = cst.top();cst.pop();int a = ist.top();ist.pop();int b = ist.top();ist.pop();int x = 0;if(ch == '+'){x = b + a;}else if(ch == '-'){x = b - a;}else if(ch == '*'){x = b * a;}else if(ch == '/'){x = b / a;}ist.push(x);
// i++;}cst.pop();i++;}else if(bijiao(str[i]) >= bijiao(cst.top())){ //优先级高的直接入栈 cst.push(str[i]);i++;}else if(bijiao(str[i]) < bijiao(cst.top())){while(bijiao(str[i]) < bijiao(cst.top())){ //直到当前的符号优先级比栈顶优先级高,才入栈,否则一直运算 char ch;ch = cst.top();cst.pop();int a = ist.top();ist.pop();int b = ist.top();ist.pop();int x = 0;if(ch == '+'){x = b + a;}else if(ch == '-'){x = b - a;}else if(ch == '*'){x = b * a;}else if(ch == '/'){x = b / a;}ist.push(x);}cst.push(str[i]);i++;}}return ist.top();
}int main(){string str;cin >> str;cout << f(str) << endl;return 0;
}
转载于:https://www.cnblogs.com/zhumengdexiaobai/p/8456004.html
51-表达式计算(带括号的)相关推荐
- 中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现
文章目录 中缀表达式转后缀表达式思路 逆波兰表达式计算思路 代码实现 中缀表达式转后缀表达式思路 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将 ...
- oc 计算 带括号 式子
下面代码实现可以计算 类似以下的字符窜. @"(1+2*(3+4)+3)/2" 自写一个简单 stack .不知道 OC为什么不提供Stack类. #import <Foun ...
- 表达式求值:从“加减”到“带括号的加减乘除”的实践过程
本文乃Siliphen原创,转载请注明出处:http://blog.csdn.NET/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个 ...
- 【软工Work1】四则加减乘除混合运算(带括号、真分数)
大家好,很高兴写一片博客给分享自己的这段奇妙的experience of coding! 本来想听老师建议在github上down一些代码的,但之后看网上代码都挺复杂怕难改.而且自己更简单的自己的思路 ...
- 模拟表达式运算(加减乘除,负数,带括号)
模拟表达式运算(加减乘除,负数,带括号) 要模拟表达式运算需要目标不同表达式之间的转换关系. 可以参考我的另一篇文章(中后缀表达式转换) 由于水平问题(自己写的总有bug,而且又长又繁琐),所以参考代 ...
- [算法 笔记]字符串表达式计算(简易版)
题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...
- 带括号的简单四则计算器(思路)
二更,理完思路后自己用Java写了个最简单的计算器 https://blog.csdn.net/weixin_42324771/article/details/90144707 以下是原文 网上有很多 ...
- 【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器
一. 实验任务(实验题目.目的) 搞个图形化的代括号的计算器 二. 任务分析 假设已经有了计算器,实现按下等号的计算算法 学习qt 设置各按钮槽函数 将算法缝合进qt内 设计实现负数.小数 优化代码计 ...
- 十以内带括号的加减法(c++)
这是数据结构老师在课上讲的例题,具体教程可以看我上传的ppt,问题要求如下: 输入一串字符串,为十以内带括号的加减乘除,输出后缀表达式和结果. 解决思路: 先将字符串转化为后缀表达式,然后利用后缀表达 ...
最新文章
- SQL Server 运行计划操作符具体解释(2)——串联(Concatenation )
- 华为的鸿蒙系统可以装在电脑上吗_继鸿蒙系统后!华为首款台式机电脑上线:联想PC霸主地位危险了...
- DeepMatching文献总结:图像拼接、图像匹配、图像检索
- CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记
- Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
- C语言九十七之实现有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?并且输出多少个
- Mac MySQLdb模块安装,可算解决了
- MapReduce 作业调试
- oracle序列的描述,Oracle同义词和序列的基本使用方法
- Struts框架命名空间问题答疑
- sqlserver卸载不完全导致安装失败
- 工程项目管理系统源码
- 鸟哥的linux私房菜学习笔记7
- 文档词频矩阵_对论文“从词向量到文档距离”的理解
- 数据结构算法---八大排序
- git merge 单个文件
- python生成基础头像_python个性化头像
- 【docker】出现segmentation fault,如何导出转储
- 计算机考试去底纹,2017职称计算机考试Word 2003知识点:段落添加边框和底纹
- 数据库的基本概念-基础(课堂笔记)