224. 基本计算器
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
代码可能稍微复杂点,思路还是比较清晰的,解题代码如下:
long long f(char *s,int *pos){
long long re=0;
while(s[(*pos)]>='0'&&s[(*pos)]<='9'){
re=re*10+s[(*pos)]-'0';
(*pos)++;
}
return re;
}
int calculate2(char *s,int *pos){
long long len=strlen(s);
long long optstack[100];
long long otop=0;
long long re=0;
optstack[otop++]=1;
while(s[*pos]!='\0'){
if(s[*pos]==' '){
(*pos)++;
continue;
}
if(s[(*pos)]=='+'){
optstack[otop++]=1;
(*pos)++;
}
else if(s[(*pos)]=='-'){
optstack[otop++]=-1;
(*pos)++;
}
else if(s[*pos]=='('){
(*pos)++;
long long rez=calculate2(s,pos);
re=re+optstack[--otop]*rez;
printf(" %c ",s[otop]);
}
else if(s[(*pos)]==')'){
(*pos)++;
return re;
}
else{
long long ret=f(s,pos);
re=re+optstack[--otop]*ret;
}
}
return re;
}
int calculate(char * s){
long long *pos=(int *)malloc(sizeof(long long));
*pos=0;
long long re=calculate2(s,pos);
printf("%d ",re);
return re;
}