• 后缀表达式(中————后)


    #include <bits/stdc++.h>
    #define MAX 100  
    char stack[101];  
    int top=-1;    
    void fun( char a[],char b[]){  
        int len,j=-1;  
        len=strlen(a);  
        j=-1;  
        for(int i=0;i<len;i++){  
            switch(a[i]){  
                case '(':stack[++top]='(';break;              
                case '-':  
                case '+':while(top>=0&&stack[top]!='(')   //当遇到"+-"时,到"("前的运算符全部出栈   
                              b[++j]=stack[top--];  
                        stack[++top]=' ';                //运算符进栈前先进去一个' '   
                        stack[++top]=a[i];               //运算符进栈   
                        break;  
                case '*':  
                case '/':while(top>=0&&stack[top]!='('&&stack[top]!='+'&&stack[top]!='-')  
                             b[++j]=stack[top--];        //当遇到"*/"时,到"( + -"前的运算符全部出栈   
                        stack[++top]=' ';  
                        stack[++top]=a[i];  
                        break;  
                case')':while(stack[top]!='(')  
                            b[++j]=stack[top--];  
                        top--;  
                        break;  
                default:  
                        b[++j]=a[i];  
                        if(a[i+1]<'0'||a[i+1]>'9')  
                                b[++j]=' ';  
            }        
        }  
        while(top>=0)  
            b[++j]=stack[top--];  
        b[++j]='';  
        return ;
    }  
    int compvalue(char exp[])  {  
        int i,len,sum=0,c;  
        top=-1;  
        int digit[MAX];  
        len=strlen(exp);  
        for(int i=0;i<len;i++){  
            switch(exp[i]){  
                case' ':break;  
                case'+':sum=digit[top]+digit[top-1];  
                        digit[--top]=sum;  
                        break;  
                case'-':sum=digit[top-1]-digit[top];  
                        digit[--top]=sum;  
                        break;  
                case'*':sum=digit[top]*digit[top-1];  
                        digit[--top]=sum;  
                        break;  
                case'/':sum=digit[top-1]/digit[top];  
                        digit[--top]=sum;  
                        break;  
                default:  
                        c=0;  
                        while(exp[i]>='0'&&exp[i]<='9'){      
                            c=c*10+exp[i]-'0';  
                            i++;  
                        }  
                        digit[++top]=c;  
            }          
        }  
        return digit[0];  
    }  
    int main()  
    {  
        char a[MAX],b[MAX];  
        gets(s);
        fun(a,b);  
        puts(b);
        cout<<compvalue(b);  
        return 0;  

  • 相关阅读:
    【File类:重命名功能】
    一段代码-Java
    Galahad
    简单的中位数
    小A的题 线段树区间赋值
    上升子序列方案数
    Superdoku 二分图匹配
    Haybale Guessing 区间并查集
    Dijkstra+二分查找
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/jr-ag/p/9064333.html
Copyright © 2020-2023  润新知