题目描述:
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.
这道题思路比较简单,就是分别计算每一个括号内的表达式的大小。当读到(
时就入栈,读到)
时就出栈。如此不断执行直到计算出结果。唯一的难点就在于容易把正负号搞混。在我的代码里,我把括号用-1001和-1002来标记正负。
int stack[1000000];
int p=0;
void push(int x) { stack[p++] = x;}
int pop() { return stack[--p];}
int calculate(char* s) {
int n = strlen(s);
bool flag = true; // record + and -
int number = 0; // calculate each integer
int sum = 0; // calculate the sum
for (int i=0; i<n; i++) {
switch (s[i]) {
case ' ' : break;
case '(' : push(flag?-1001:-1002); flag = true; break;
case ')' : {
int c = pop();
int tmp = number;
while (c != -1001 && c != -1002) {
tmp += c;
c = pop();
}
push(c==-1001?tmp:-tmp);
number = 0;
break;
}
case '+' : push(number); number = 0; flag=true; break;
case '-' : push(number); number = 0; flag = false; break;
default : {
number = flag ? number * 10 + (s[i] - '0') : number * 10 - (s[i] - '0');
}
}
}
while(p != 0) {
sum += pop();
}
return sum + number;
}