题目:
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(); } };