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 .
Example 1:
Input: "1 + 1" Output: 2
Example 2:
Input: " 2-1 + 2 " Output: 3
Example 3:
Input: "(1+(4+5+2)-3)+(6+8)" Output: 23
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
题目实现一个简单的解释器。
简单题,用栈实现,代码如下:
typedef struct Node{
long long int num;
int sign;
};
int calculate(char* s) {
int l = strlen(s);
struct Node stack[l];
int stackLen = 0;
int sign = 1;
long long int leftNum = 0;
long long int rightNum = 0;
while(*s != '\0'){
char c = *s;
++s;
if(c >= '0' && c <= '9'){
rightNum = 10*rightNum + c-'0';
}else{
switch(c){
case '+':
leftNum += sign*rightNum;
sign = 1;
rightNum = 0;
break;
case '-':
leftNum += sign*rightNum;
sign = -1;
rightNum = 0;
break;
case '(':
stack[stackLen].num = leftNum;
stack[stackLen++].sign = sign;
leftNum = 0;
sign = 1;
rightNum = 0;
break;
case ')':
leftNum += sign*rightNum;
--stackLen;
leftNum = stack[stackLen].num + stack[stackLen].sign*leftNum;
rightNum = 0;
break;
}
}
}
return leftNum + sign*rightNum;
}