题目描述:
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
思路:
先计算乘除,最后再计算加减
遍历整个字符串,
当来一个运算符,放到运算符队列当中
当来一个数,判断运算符最后一个是不是乘除,如果是则完成乘除,再把结果放到队列当中;否则直接把数放到队列当中
代码如下:
class Solution {
public:
int calculate(string s) {
deque<int>dp1;
deque<char>dp2;
for(int i=0;i<s.size();i++){
if(s[i]==' ') continue;
if(isdigit(s[i])){
int m=s[i]-'0';
while(i<s.size()&&isdigit(s[++i])){
m=m*10+(s[i]-'0');
}
i--;
if(dp2.size()&&(dp2.back()=='*'||dp2.back()=='/')){
int k=dp1.back();
dp1.pop_back();
dp2.back() =='*' ? dp1.push_back(k * m) : dp1.push_back(k / m);
dp2.pop_back();
}
else{
dp1.push_back(m);
}
}
else{
dp2.push_back(s[i]);
}
}
while(dp2.size()){
int a=dp1.front();
dp1.pop_front();
int b=dp1.front();
dp1.pop_front();
dp2.front()=='+'?dp1.push_front(a+b):dp1.push_front(a-b);
dp2.pop_front();
}
return dp1.front();
}
};