后缀表达式变换为中缀表达式

来源:互联网 发布:淘宝网笔袋 编辑:程序博客网 时间:2024/06/05 13:29
  • 详细说明:将由数字和四则运算符组成的后缀表达式变换为中缀表达式。输入的后缀表达式包含的运算符不超过15个。要求转换后的中缀表达式中不应出现不必要的括号。例如,整个表达式两端的括号要省略,不影响原计算顺序的括号要省略。
  • 后缀式转中缀式   
  • #include<stdio.h>   
  • #include<string.h>   
  • char str[50][1000],si[1000],t[1000];   
  • long gra[1000];   
  • int main(){   
  •     long l,sn,i,j,k;   
  •     gets(si);   
  •     l=strlen(si);   
  •     sn=0;   
  •     i=0;j=0;   
  •     while (j<l){   
  •           while ((j<l)&&(si[j]!=' '))   
  •                 j++;   
  •           if ((j==i+1)&&(si[i]=='+')){   
  •              sn--;   
  •              if (gra[sn-1]<0){   
  •                 strcpy(t,str[sn-1]);   
  •                 strcpy(str[sn-1],"(");   
  •                 strcat(str[sn-1],t);   
  •                 strcat(str[sn-1],")");   
  •              }   
  •              strcat(str[sn-1],"+");   
  •              if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){   
  •                 strcpy(t,str[sn]);   
  •                 strcpy(str[sn],"(");   
  •                 strcat(str[sn],t);   
  •                 strcat(str[sn],")");   
  •              }   
  •              strcat(str[sn-1],str[sn]);   
  •              gra[sn-1]=1;   
  •              gra[sn]=0;   
  •           }   
  •           else if ((j==i+1)&&(si[i]=='-')){   
  •                sn--;   
  •                if (gra[sn-1]<0){   
  •                   strcpy(t,str[sn-1]);   
  •                   strcpy(str[sn-1],"(");   
  •                   strcat(str[sn-1],t);   
  •                   strcat(str[sn-1],")");   
  •                }   
  •                strcat(str[sn-1],"-");   
  •                if ((gra[sn]==1)||(gra[sn]==2)||(gra[sn]<0)){   
  •                   strcpy(t,str[sn]);   
  •                   strcpy(str[sn],"(");   
  •                   strcat(str[sn],t);   
  •                   strcat(str[sn],")");   
  •                }   
  •                strcat(str[sn-1],str[sn]);   
  •                gra[sn-1]=2;   
  •                gra[sn]=0;   
  •           }   
  •           else if ((j==i+1)&&(si[i]=='*')){   
  •                sn--;   
  •                if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){   
  •                   strcpy(t,str[sn-1]);   
  •                   strcpy(str[sn-1],"(");   
  •                   strcat(str[sn-1],t);   
  •                   strcat(str[sn-1],")");   
  •                }   
  •                strcat(str[sn-1],"*");   
  •                if (gra[sn]!=0){   
  •                   strcpy(t,str[sn]);   
  •                   strcpy(str[sn],"(");   
  •                   strcat(str[sn],t);   
  •                   strcat(str[sn],")");   
  •                }   
  •                strcat(str[sn-1],str[sn]);   
  •                gra[sn-1]=3;   
  •                gra[sn]=0;   
  •           }   
  •           else if ((j==i+1)&&(si[i]=='/')){   
  •                sn--;   
  •                if ((gra[sn-1]==1)||(gra[sn-1]==2)||(gra[sn-1]<0)){   
  •                   strcpy(t,str[sn-1]);   
  •                   strcpy(str[sn-1],"(");   
  •                   strcat(str[sn-1],t);   
  •                   strcat(str[sn-1],")");   
  •                }   
  •                strcat(str[sn-1],"/");   
  •                if (gra[sn]!=0){   
  •                   strcpy(t,str[sn]);   
  •                   strcpy(str[sn],"(");   
  •                   strcat(str[sn],t);   
  •                   strcat(str[sn],")");   
  •                }   
  •                strcat(str[sn-1],str[sn]);   
  •                gra[sn-1]=4;   
  •                gra[sn]=0;   
  •           }   
  •           else{   
  •                for (k=i;k<j;k++)   
  •                    str[sn][k-i]=si[k];   
  •                str[sn][j-i]='\0';   
  •                if (str[sn][0]=='-')   
  •                   gra[sn]=-1;   
  •                else   
  •                    gra[sn]=0;   
  •                sn++;   
  •           }   
  •           while ((j<l)&&(si[j]==' '))   
  •                 j++;   
  •           i=j;j=i;   
  •     }   
  •     printf("%s\n",str[0]);   
  •     scanf("%ld",&sn);   
  •     return 0;   
  • 原创粉丝点击