后缀表达式变换为中缀表达式
来源:互联网 发布:淘宝网笔袋 编辑:程序博客网 时间: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; }