表达式求值难度3

来源:互联网 发布:人工智能学院首页 编辑:程序博客网 时间:2024/06/05 09:57



#include<stdio.h>
#include<string.h>
int main()
{
    int t;
    scanf("%d",&t);//有几组数据
    getchar();
    while(t--)
    {
        int a[300];
        char b[300],s[300];
        int top1=-1,m,top2=-1,i,n=0,flag=1;
        gets(s);//整体存放到一个字符组里面
        m=strlen(s);
        for(i=0;i<m;i++)
        {
            if((s[i]<'0'|| s[i]>'9') && s[i]!=')')
            {//当为字符 时候,就存放到b这个以数组开的 栈 中
                top1++;//栈的栈顶
                b[top1]=s[i];//压栈
            }
            if(s[i]>='0'&& s[i]<='9')
            {
                n=10*n+s[i]-'0';//如果数字是两位以上的,要注意恢复原来数字
                flag=1;//设个标记,如果下面遇到其他字符的话,把数字压栈
            }
            if((s[i]==')'||s[i]==','||i+1==m)&&flag)//遇到","")“时把数字压栈
            {
                top2++;
                a[top2]=n;
                flag=0;
                n=0;//压栈之后,把n初始化
            }
            if(s[i]==')')//遇到右括号,开始计算这个括号里面的表达式
            {
                if(b[top1-2]=='d')
                {
                    n=a[top2]+a[top2-1];
                    top2=top2-1;//计算过加法之后,把数字栈中的两个加数弹出,同时,把和压进去
                    a[top2]=n;//将和压栈
                    n=0;
                    top1=top1-5;//此时,计算过一个括号里面的运算,将字符栈中的5个字符弹出,直至遇到逗号
                }
                else if(b[top1-2]=='n')
                {
                    if(a[top2]>a[top2-1])
                        n=a[top2-1];
                    else
                        n=a[top2];
                    top2--;
                    a[top2]=n;
                
                    n=0;
                    top1=top1-5;
                }
                else if(b[top1-2]=='x')
                {
                    if(a[top2]<a[top2-1])
                        n=a[top2-1];
                    else
                        n=a[top2];
                    top2--;
                    a[top2]=n;
                    n=0;
                    top1=top1-5;
                }
            }
        }
        printf("%d\n",a[top2]);
    }return 0;
}


0 0
原创粉丝点击