题目:
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) {
int len = s.length();
stack<int> st;
int i = 0;
int result = 0;
while(i<len)
{
int sum = 0;
if(s.at(i)>='0'&&s.at(i)<='9')
{
int j = i+1;
sum = s.at(i)-'0';
while(j<=len-1&&s.at(j)>='0'&&s.at(j)<='9')
{
sum = (sum*10 + (s.at(j) - '0'));
j++;
}
// cout<<sum<<endl;
//以上计算数字字符串转化为数字
if(!st.empty()&&(char)st.top()=='+')
{
st.pop();
result = st.top()+sum;
st.pop();
st.push(result);
}
else if(!st.empty()&&(char)st.top()=='-')
{
st.pop();
result = st.top()-sum;
st.pop();
st.push(result);
}
else
{
st.push(sum);
}
i = j;
}
else if(s.at(i)==' ')
{
i++;
}
else if(s.at(i)=='+'||s.at(i)=='-')
{
st.push((int)s.at(i));
i++;
}
else if(s.at(i)=='(')
{
st.push((int)s.at(i));
i++;
}
else if(s.at(i)==')')
{
int temp = st.top();
if(!st.empty())
st.pop();
if(!st.empty())
st.pop();
if(!st.empty()&&st.top()=='+')
{
st.pop();//去掉
temp = temp+(st.top());
st.pop();
st.push(temp);
}
else if(!st.empty()&&st.top()=='-')
{
st.pop();//去掉
temp = (st.top())-temp;
st.pop();
st.push(temp);
}
else
{
st.push(temp);
}
i++;
}
}
return st.top();
}
};