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) {
stack<int> sta;
int i = 0;
int f = 1;
int ans = 0;
for(i = 0;i<s.length();i++)
{
if(s[i]>='0' && s[i]<='9')
{
int temp = s[i]-'0';
i++;
while(s[i]>='0' && s[i] <='9')
{
temp = temp*10 + s[i]-'0' ;
i++;
}
i--;
ans = ans + temp*f;
}
else if(s[i] =='-' )
f = -1;
else if(s[i] == '+')
f = 1;
else if(s[i] == '(')
{
sta.push(ans);
sta.push(f);
ans = 0;
f = 1;
}
else if(s[i] == ')')
{
ans = ans * sta.top();
sta.pop();
ans = ans + sta.top();
sta.pop();
}
}
return ans;
}
};