编辑代码

#include<iostream>
#include<iostream>
using namespace std;
   int pd(char x){   //为运算符编号函数
     int p=0;
     switch(x)
        {case'+':p=0;break;
         case'-':p=1;break;
         case'*':p=2;break;
         case'/':p=3;break;
         case'(':p=4;break;
         case')':p=5;break;
            }
      return p;}

int main(){
    //运算符优先级二维数组
    int sz[5][6]={{0,0,1,1,1,0},{0,0,1,1,1,0},{0,0,0,0,1,0},{0,0,0,0,1,0},{1,1,1,1,1,0}};
    string s;  //设表达式为s
    cout<<"输入表达式"<<endl;
    cin>>s;
    char ysf[20];  
    int top=0;     
   char hz[20];    
    int next=0;    
    ysf[0]='#';
    hz[0]='#';
    int f=0;          
 for(int i=0;s[i]!='\0';i++){
        if(s[i]=='('||s[i]==')'||s[i]=='*'||s[i]=='/'||s[i]=='+'||s[i]=='-')
        {      if(ysf[top]=='#')
                  ysf[++top]=s[i];
               else
                  {int b=pd(s[i]);  
                    while(f!=1&&top>=0){
                        int a=pd(ysf[top]);   
                        if(top==0)break;       
                        if(b==5&&a==4)        
                            {f=1;top--;break;}
                        f=sz[a][b];            
                        if(f==0)               
                            {hz[++next]=ysf[top];
                             top--;}
                   }
                   f=0;
                   //对b操作
                    if(s[i]!=')')
                     ysf[++top]=s[i];

                   }
                }
         else hz[++next]=s[i];     

}
    if(top!=0)   
        for(int i=0;i<=top;i++)
            hz[++next]=ysf[top--];
    for(int i=1;i<=next;i++)
        cout<<hz[i];
}