实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 (
,右括号 )
,加号 +
,减号 -
,非负整数和空格
。
示例 1:
输入: "1 + 1"
输出: 2
示例 2:
输入: " 2-1 + 2 "
输出: 3
示例 3:
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
class Solution {
public:
int calculate(string s) {
stack<int> sign;// 符号op
sign.push(1);
int ans = 0,num = 0,op = 1;
for(char c:s){
if(c==' ') continue;
if('0'<=c && c<='9'){
num = num*10 + (c-'0');
continue;
}
ans += op*num;
num = 0;
if(c=='+'){
op = sign.top();
}else if(c=='-'){
op = -sign.top();
}else if(c=='('){
sign.push(op);
}else if(c==')'){
sign.pop();
}
}
ans += op*num;
return ans;
}
};