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

#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]='\0';  
    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;  

posted @ 2018-05-20 19:56  小蒟蒻i  阅读(227)  评论(0编辑  收藏  举报