关于中缀转后缀表达式的小问题、
程序代码:
#include <stdio.h> #include <conio.h> #include <stdlib.h> main() { int i=0,j=0; //i控制临时栈最高点,J控制输出栈 int k=0; //临时栈的数量 char *p; char str[100];//读入字符串 int str2[100];//临时栈 char str3[100];//输出栈 scanf("%s",str); for(p=str;;p++)//指向原字符 { if(*p>='0'&&*p<='9') str3[j++]=*p; //将那个数字放入输出栈 else { if(*p=='+') {str2[i++]=11;k++;} else if(*p=='-') {str2[i++]=12;k++;} else if(*p=='*') {str2[i++]=21;k++;} else if(*p=='/') {str2[i++]=22;k++;}//i已经指向下一个 else ;//?+-*/方便取余表示先后级 if(*p=='\0') { if(str2[0]==11) str3[j]='+'; else if(str2[0]==12) str3[j]='-'; else if(str2[0]==21) str3[j]='*'; else if(str2[0]==22) str3[j]='/'; else; break; } else if(k>=2) { if(str2[i-2]/10<str2[i-1]/10) //比较运算先后若同级或者后者大于前者 { p++; if(*p>='0'&&*p<='9') str3[j++]=*p; //将那个数字放入输出栈 if(str2[i-1]==21) {str3[j++]='*';i--;k--;}//将后一个放入输出栈 else if(str2[i-1]==22) {str3[j++]='/';i--;k--;} else; //i指回原来最高位子 if(str2[i-2]==11) {str3[j++]='+';i--;k--;} //下次直接覆盖 else if(str2[i-2]==12) {str3[j++]='-';i--;k--;} else; } else if(str2[i-2]/10>=str2[i-1]/10) { if(str2[i-2]==21) {str3[j++]='*';i--;k--;}//将前一个放入输出栈 else if(str2[i-2]==22) {str3[j++]='/';i--;k--;}//i指回原来最高位子 else if(str2[i-2]==11) {str3[j++]='+';i--;k--;} //下次直接覆盖 else if(str2[i-2]==12) {str3[j++]='-';i--;k--;} else; str2[i-1]=str2[i]; } } } } for(p=str3;*p!='\0';p++) printf("%c ",*p); getch(); return 0; }自己编写的一段中缀表达式转换为后缀表达式的程序(不支持括号),运行完后老是出现多余的俩符号,请高手看看哪里出错了