[LeetCode]Basic Calculator II
来源:互联网 发布:最优化方法第二版pdf 编辑:程序博客网 时间:2024/05/22 10:22
题目不难,但是想做对却也需要考虑很多细节。
没有括号的运算就是先乘除后加减,思路是把➕和➖看作分隔符,先计算分隔符隔开的一个个term,再把term相加。
举个例子:a+b*c/d-e,在这个例子中,读到第一个➕时,term是a,并且我们可以认为a已经被➕分割开了,可以加到总和里去了,所以sum现在是a,term往后读一个数,是b。然后往后读一个符号是✖️,所以term=term*c,即term = b*c。再向后读一个符号是➗,所以term=b*c/d。再读一个符号是减号,我们可以认为term已经被分割开,可以加入总和了,于是sum = a+b*c/d。但注意因为是➖,所以term是-e而不是e。所以我们只需要在运算式两端补两个➕,就可以完成了。
贴出下面的代码主要是因为它运用了stringstream这个类,非常好用。
iostream 标准库支持内存中的输入/输出,只要将流与存储在程序内存中的 string 对象捆绑起来即可。此时,可使用 iostream 输入和输出操作符读写这个 string 对象。标准库定义了三种类型的字符串流:
• istringstream,由 istream 派生而来,提供读 string 的功能。
• ostringstream,由 ostream 派生而来,提供写 string 的功能。
• stringstream,由 iostream 派生而来,提供读写 string 的功能。
要使用上述类,必须包含 sstream 头文件。
另外getline也可以用来作split的功能,原型是getline(istream&,string&,char delim)
int calculate(string s) { istringstream in('+'+s+'+'); int term = 0, total = 0, n; char op; while (in>>op){ if (op == '+' || op == '-'){ total += term; in >> term; term *= op == '+' ? 1 : -1; }else{ int tmp; in >> tmp; if (op == '*') term *= tmp; else term /= tmp; } } return total; }
- [LeetCode]Basic Calculator II
- [LeetCode]Basic Calculator II
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- 【LeetCode】Basic Calculator II
- [Leetcode]Basic Calculator II
- LeetCode Basic Calculator II
- [Leetcode]Basic Calculator II
- leetcode:Basic Calculator II
- leetcode:Basic Calculator II
- Basic Calculator II -- leetcode
- *LeetCode-Basic Calculator II
- leetcode:Basic Calculator II
- LeetCode -- Basic Calculator II
- 《leetCode》:Basic Calculator II
- 【Leetcode】Basic Calculator II
- LeetCode:Basic Calculator II
- CCAction
- Android之算法编程题
- 什么是heredoc和nowdoc
- Netty 4.x 用户指导
- 安装redis----(一)
- [LeetCode]Basic Calculator II
- 上机1
- 销售订单行状态为“已登记”解决办法
- Audroid-studio2.2安装1%与windows不兼容和Error occurred during initialization of VM 的问题
- mybatis打印sql和参数
- Android 监听wifi广播的两种方式
- Socket 和Http
- MR简单串联(ChainMapper/ChainReducer)
- 【机器学习】决策树的优缺点