算术表达式求值

计算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;

}

《算术表达式求值》

点赞