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;
};