给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: “3+2*2”
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/calculator-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int calculate(string s) {
stack<int> sta;
char c='+';
int num=0;
for(int i=0;i<=s.length();i++){ //这里是i<=s.length();一定要有等号!!!
if(isdigit(s[i])){
num=num*10+(s[i]-'0');
}else if(isspace(s[i])){
continue;
}else{
switch(c){
case '+':sta.push(num);break;
case '-':sta.push(-num);break;
case '*':num*=sta.top();sta.pop();sta.push(num);break;
case '/':num=sta.top()/num;sta.pop();sta.push(num);break;
}
num=0;
c=s[i];
}
}
int res=0;
while(!sta.empty()){
res+=sta.top();
sta.pop();
}
return res;
}
};