Basic Calculator
折腾了好一会儿,其实意思很简单。就是实现一个包含+,-法和括号运算的计算器。
可能是没找对方法吧,看了网上的代码量,感觉我写的就是一坨屎啊。。。参考:http://blog.youkuaiyun.com/xudli/article/details/46554835
每次压栈都是当前的结果,这样计算量会小很多。不过比较起来大神的代码比较简单,我的思路还是比较清晰的。
我的代码:
class Solution {
public:
int calculate(string s) {
stack<int>myStack;
stack<char>myOperator;
int i;
for (i = 0; i<s.length(); i++)
{
while (i < s.length() && s[i] == ' ')
i++;
if (i == s.length())
break;
if (s[i] == '+' || s[i] == '-' || s[i] == '(')
myOperator.push(s[i]);
else if(s[i] == ')')
{
while ( myOperator.top() != '(')
{
int element1 = myStack.top();
myStack.pop();
int element2 = myStack.top();
myStack.pop();
char op = myOperator.top();
myOperator.pop();
if (op == '+')
myStack.push(element1 + element2);
else if (op == '-')
myStack.push(element2 - element1);
}
if (!myOperator.empty())
myOperator.pop();
while (!myOperator.empty() && (myOperator.top() != '('))
{
int element1 = myStack.top();
myStack.pop();
int element2 = myStack.top();
myStack.pop();
char op = myOperator.top();
myOperator.pop();
if (op == '+')
myStack.push(element1 + element2);
else if (op == '-')
myStack.push(element2 - element1);
}
}
else
{
//myStack.push(getNumber(s, i));
long long int number = 0;
int j = i;
while (j<s.length() && (s[j]-'0'<=9)&&(s[j]-'0'>=0))
{
number = number * 10 + (s[j] - '0');
j++;
}
i = j - 1;
myStack.push(number);
while (!myOperator.empty() && (myOperator.top() != '('))
{
int element1 = myStack.top();
myStack.pop();
int element2 = myStack.top();
myStack.pop();
char op = myOperator.top();
myOperator.pop();
if (op == '+')
myStack.push(element1 + element2);
else if (op == '-')
myStack.push(element2 - element1);
}
//if (!myOperator.empty())
//myOperator.pop();
}
}
return myStack.top();
}
};