我有这个程序用于中缀到后缀表达式转换,但它无法正常工作....例如。如果我输入表达式a+b+(c-d)*e
,它会将输出后缀表达式设为abcd-++e*
而不是abcd-e*++
。
char inputexp[50], stacks[50], resultexp[50];
int stacktop=-1, resulttop=-1;
void priority()
{
'^'>'/'>'*'>'+'>'-';
}
void push(char a)
{
stacktop++;
stacks[stacktop]=a;
}
void pop()
{
resulttop++;
resultexp[resulttop]=stacks[stacktop];
--stacktop;
}
void input()
{
cout<<"Enter the infix expression=";
scanf("%s", inputexp);
}
void operandadd (char a)
{
resulttop++;
resultexp[resulttop]=a;
}
void operatorfound (char a)
{
if(stacktop==-1||stacks[stacktop]=='(')
{
push(a);
}
else
{
if(a<stacks[stacktop])
{
while(stacks[stacktop]>a&&stacks[stacktop]!='(')
{
pop();
}
push(a);
}
else
{
push(a);
}
}
}
void rightparenthesisfound (char a)
{
while(stacks[stacktop]!='(')
{
pop();
}
--stacktop;
}
void leftparenthesisfound (char a)
{
push(a);
}
void variablefound(char a)
{
resulttop++;
resultexp[resulttop]=a;
}
void result()
{
cout<<"Postfix Expression:"<<endl;
for(int i=0; i<strlen(resultexp); i++)
{
cout<<resultexp[i]<<endl;
}
}
int main()
{
input();
cout<<strlen(inputexp)<<endl;
priority();
for(int i=0; i<strlen(inputexp); i++)
{
if(inputexp[i]=='+'||inputexp[i]=='-'||inputexp[i]=='*'||inputexp[i]=='/'||inputexp[i]=='^')
{
operatorfound(inputexp[i]);
cout<<stacks<<endl;
}
else if(inputexp[i]=='(')
{
leftparenthesisfound(inputexp[i]);
}
else if(inputexp[i]==')')
{
cout<<"RIGHT "<<"STACK:"<<stacks<<endl;
rightparenthesisfound(inputexp[i]);
cout<<"RIGHT PARENTHESIS FOUND:"<<" Stack: "<<stacks<<"\t"<<"Result:"<<resultexp;
}
else
{
variablefound(inputexp[i]);
cout<<"RESULT: "<<resultexp<<endl;
}
}
if(stacktop!=-1)
{
while(stacktop!=-1)
{
pop();
}
}
cout<<endl<<resultexp<<endl;
return 0;
}
答案 0 :(得分:0)
此功能不起作用:
void priority()
{
'^'>'/'>'*'>'+'>'-';
}
从技术上讲,它将一个角色与另一个角色进行比较。结果永远不会返回。它看起来更像是混淆代码。
优先级可以通过多种方式实现,常见的方法是通过代码中的if
语句顺序。第一个if
比较是最高优先级,下一个else if
是下一个较低优先级,依此类推。
另一种方法是使用关联。该关联包含与符号关联的优先级编号:
{'^', 1}
{'/', 2}
{'*', 3}
{'+', 4}
{'-', 5}
这可以通过查找表或硬编码为switch
语句来实现。
顺便说一下,您可能希望使用优先级而不是priority
。
此外,你应该让你的函数返回某些东西,否则外面的世界就不会知道它在做什么。
非常重要:在网上搜索“infix to postfix conversion c ++”,它会返回许多示例供您考虑。