正文

表达式求值II(只对整数有效)2005-08-13 17:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/3773.html

分享到:

int main()
{
    int len=0,i=0,j;
    int m,n,result;
    char op;
    int number=0;
    char enter[100];
    int s1[100],top1=0,top2=0;
    char s2[100];
    s2[top2]='(';top2++;
    scanf("%s",enter);
    for(i=0;i<strlen(enter);i++)
    {
        if(enter[i]>='0' && enter[i]<='9')
        {
            if (enter[i+1]>='0' && enter[i+1]<='9')
                number=10*number+enter[i]-'0';
            else
            {
            s[len].index=1;
            s[len].a=10*number+enter[i]-'0';
            s[len].b='0';
            len++;
            number=0;
            }
        }
        else
        {

            s[len].index=0;
            s[len].a=0;
            s[len].b=enter[i];
            len++;
        }    
        /*printf("len@=%d,i=%d\n",len,i); */
    }
    if (enter[strlen(enter)-1]!='=')
    {
        s[len].index=0;
        s[len].a=0;
        s[len].b='=';
        len++;
     }
    for(i=0;i<len;i++)
    {
        if (s[i].b=='=')
        {
            while(top1!=1)
            {
            m=s1[top1-1];
            top1--;
            n=s1[top1-1];
            top1--;
            op=s2[top2-1];
            top2--;
            result=oper(n,m,op);
            s1[top1]=result;
            top1++;
            }
            printf("%d\n",s1[top1-1]);
            break;
        }
        if (s[i].b==')')
        {
            while(s2[top2-1]!='(')
            {
            m=s1[top1-1];
            top1--;
            n=s1[top1-1];
            top1--;
            op=s2[top2-1];
            top2--;
            result=oper(n,m,op);
            s1[top1]=result;
            top1++;
            }
            top2--;
        }
        else
        {
        if(s[i].index==1)
        {
            s1[top1]=s[i].a;
            top1++;
        }
        else
        {
            if (comp1(s[i].b,s2[top2-1])==1)
            {
                s2[top2]=s[i].b;
                top2++;
            }
            else
            {
                if(comp2(s[i].b,s2[top2-1])==0)
                {
                    m=s1[top1-1];
                    top1--;
                    n=s1[top1-1];
                    top1--;
                    op=s2[top2-1];
                    top2--;
                    result=oper(n,m,op);
                    s1[top1]=result;
                    top1++;
                }
                s2[top2]=s[i].b;
                top2++;
            }
        }
        }
        /*
        if (s[i].index==1)
        {
        for (j=0;j<top1;j++)
        printf("%d ",s1[j]);
        printf("\n");
        }
        if (s[i].index==0)
        {
        for (j=0;j<top2;j++)
        printf("%c ",s2[j]);
        printf("\n");
        }
        */
    }
    getch();
}

阅读(2597) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册