Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
Example 1:
Input: "3+2*2" Output: 7
Example 2:
Input: " 3/2 " Output: 1
Example 3:
Input: " 3+5 / 2 " Output: 5
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
class Solution {
public:
int calculate(string s) {
if (s.empty())
return 0;
long res = 0, num = 0;
char sign = '+';
stack<long> st;
for (int i = 0; i < s.size(); i ++) {
char ch = s[i];
if (ch >= '0')
num = num*10 + ch - '0';
if ((ch < '0' && ch != ' ') || i == s.size()-1) {
if (sign == '+')
st.push(num);
if (sign == '-')
st.push(-num);
if (sign == '*' || sign == '/') {
int tmp = (sign == '*') ? num*st.top() : st.top()/num;
st.pop();
st.push(tmp);
}
sign = s[i];
num = 0;
}
}
while (!st.empty()) {
res += st.top();
st.pop();
}
return res;
}
};