算术表达式求值
计算3*(4+2)/2-5的值
#include <stdio.h>
#include <string.h>int Comp(char str1,char str2);
int Compute(char *str);
int Comp(char str1,char str2)
{
switch(str1)
{
case '+':
case '-':if(str2 == '(' || str2 == '#')
return 1;
else
return -1;
break;
case '*':
case '/':if(str2 == '*' || str2 == '/')
return -1;
else
return 1;
break;
case '(':return 1;break;
case ')':if(str2 == '(')
return 0;
else
return -1;break;
case '#':if(str2 == '#')
return 0;
else
return -1;break;
default:break;
}
}
int Compute(char *str)
{
char OPND[100],OPTR[100]; //定义俩个顺序栈
OPTR[0] = '#'; //栈OPTR初始化为定界符
int top1 = -1,top2 = 0;
int k,x,y,z,op;
for(int i=0;str[i] != '\0'; )
{
if(str[i] >= 48 && str[i] <= 57) //数字0的ASCII码是48
OPND[++top1] = str[i++] - 48;
else{
k = Comp(str[i],OPTR[top2]);
if(k == 1)
OPTR[++top2] = str[i++];
else if(k == -1)
{
y = OPND[top1--];
x = OPND[top1--];
op = OPTR[top2--];
switch(op)
{
case '+':z = x+y;break;
case '-':z = z-y;break;
case '*':z = x*y;break;
case '/':z = x/y;break;
default:break;
}
OPND[++top1] = z;
}else{
top2--;i++;
}
}
}
return OPND[top1];
}
int main()
{
char str[100];
int result;
printf("请输入一个算术表达式:");
scanf("%s",str);
strcat(str,"#"); //定界符
result = Compute(str);
printf("表达式的值:%d\n",result);
return 0;
}