Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2 " 2-1 + 2 " = 3 "(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not use the eval
built-in library function.
class Solution {
public:
int calculate(string s) {
if(s.size() == 0)
return 0;
stack<int> stack;
int res = 0;
int sign = 1;
for(int i=0; i<s.size(); i++) {
if (isdigit(s[i]))
{
int cur = s[i]-'0';
while(i+1<s.size() && isdigit(s[i+1]))
cur = 10*cur + s[++i] - '0';
res += sign * cur;
}else if(s[i]=='-') {
sign = -1;
} else if(s[i]=='+') {
sign = 1;
} else if( s[i]=='(') {
stack.push(res);
res = 0;
stack.push(sign);
sign = 1;
} else if(s[i]==')') {
int num1 = stack.top(); stack.pop();
int num2 = stack.top(); stack.pop();
res = num1 * res + num2;
sign = 1;
}
}
return res;
}
};