Basic Calculator
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.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Note: Do not use the eval built-in library function.
int calculate(char* s) {
int stack[10000]={0};
int stack2[10000]={0};
int i,l1,l2,op;
int tmp, res;
res=l1=l2=op=0;
for(i=0;s[i];)
{
if(s[i]==' ') {i++;continue;}
if(s[i]=='+') {op=1;i++;continue;}
if(s[i]=='-') {op=2;i++;continue;}
if(s[i]=='(')
{
if(op==0) {i++;continue;}
stack[l1++]=res;
stack2[l2++]=op;
res=0;
op=0;
i++;
continue;
}
if(s[i]==')')
{
if(l2>0)
{
tmp=res;
res=stack[--l1];
op=stack2[--l2];
if(op==1) res+=tmp;
else if(op==2) res-=tmp;
}
i++;
continue;
}
tmp=0;
while(s[i]>='0' && s[i]<='9')
{
tmp=tmp*10+s[i]-'0';
i++;
}
if(op==0) res=tmp;
else if(op==1) res+=tmp;
else if(op==2) res-=tmp;
}
return res;
}
遇到左括号,压栈当前结果和符号,遇到右括号,弹出栈中数值和符号并且与括号内结果运算。
注意奇奇怪怪的输入样例,如(1),(1)+(8)之类。