关于中缀转后缀表达式的小问题、
程序代码:#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;
}
自己编写的一段中缀表达式转换为后缀表达式的程序(不支持括号),运行完后老是出现多余的俩符号,请高手看看哪里出错了







