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.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5
Note: Do not use the eval
built-in library function.
思路:1) 在遍历字符串时计算乘除;2) 为方便使用stack,将减法转换为加分,使加减法可从右往左计算。
class Solution { public: int calculate(string s) { long long num = 0; char sign = '+'; for (size_t i = 0; i < s.size(); i++) { if (isdigit(s[i])) { num = num * 10 + s[i] - '0'; } if (!isdigit(s[i]) && !isspace(s[i]) || i == s.size()-1) { switch (sign) { case '+': break; case '-': num = -num; break; case '*': num = numStack.top() * num; numStack.pop(); break; case '/': num = numStack.top() / num; numStack.pop(); break; default: break; } numStack.push(num); num = 0; sign = s[i]; } } while (!numStack.empty()) { num += numStack.top(); numStack.pop(); } return (int)num; } private: stack<long long> numStack; };