我有一个从infix到后缀表达式转换的程序,但是它不能正常工作.例如:如果输入表达式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;
}发布于 2013-11-10 17:05:56
这个函数什么也不做:
void priority()
{
'^'>'/'>'*'>'+'>'-';
}从技术上讲,它将一个字符与另一个字符进行比较。结果永远不会返回。它看起来更像是模糊代码。
优先级可以通过多种方式实现,一种常见的方法是由if语句顺序在代码中实现。第一个if比较是最高优先级,下一个else if是下一个较低优先级,依此类推。
另一种方法是使用关联。该关联包含与符号关联的优先级编号:
{'^', 1}
{'/', 2}
{'*', 3}
{'+', 4}
{'-', 5}这可以通过查找表或硬编码为switch语句来实现。
顺便说一句,您可能希望使用优先一词,而不是priority。
另外,你应该让你的函数返回一些东西,否则外部世界将不知道它在做什么。
非常重要:在web上搜索"infix to后缀转换c++",它将返回许多示例供您考虑.
https://stackoverflow.com/questions/19891963
复制相似问题