给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
示例:
输入:s = "3+2*2"
输出:7
输入:s = " 3/2 "
输出:1
输入:s = " 3+5 / 2 "
输出:5
整数除法仅保留整数部分。
提示:
- 1 <= s.length <= 3 * 105
- s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开
- s 表示一个 有效表达式
- 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
- 题目数据保证答案是一个 32-bit 整数
思路:利用字符串的流操作可以分别吐出操作符和数字。如果当前操作符是‘+’或者‘-’,总的值加上上一个数字;如果当前操作符是‘*’或者‘/’,计算出当前操作符前后两个数进行操作的值。总的思路就是遇到乘除就计算出乘除的值,遇到加减,就把加减号前面的值加入结果中
int calculate(string s) {
stringstream in('+'+s+'+');
long long res=0,pre=0,cur;
char op;
while(in>>op){
if(op=='+'||op=='-'){
res+=pre;
in>>pre;
pre*=44-op;
}else{
in>>cur;
if(op=='*'){
pre*=cur;
}else{
pre/=cur;
}
}
}
return res;
}