gpt4 book ai didi

c - 在更新顶级变量时使用堆栈错误中缀到后缀

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:58 25 4
gpt4 key购买 nike

我正在尝试实现中缀到后缀转换的代码,但我无法获得输出。通过分析程序,我发现变量 top 没有得到更新,即使我将它的值返回给 main。请帮我弄清楚。代码是:

#include<stdio.h>

char stack[15];

int check(char op)
{
int rank=0;

switch(op)
{
case '/':
rank=1;
break;
case '*':
rank=2;
break;
case '+':
rank=3;
break;
case '-':
rank=4;
break;
}
return rank;
}


int POP(char stack[15],int top)
{
if(top==-1)
{
printf("Stack Underflow");
return top;
}
else
{
top--;
printf("%c",stack[top+1]);
return top;
}
}



int PUSH(char stack[15],int top,char op)
{
char opstack;
int rank1,rank2;
if(top>=14)
{
printf("Stack Overflow");
return top;
}

else
{
if(top==-1)
{
top++;
stack[top]=op;
return top;
}

else
{
opstack=stack[top];
rank1=check(op);
rank2=check(opstack);

if( rank1 <= rank2 )
{
top++;
stack[top]=op;
}
else
{
top=POP(stack,top);

top=PUSH(stack,top,op);
}
return top;
}

}
}


int main()
{
char string[15],ch;
int top=-1,i;

printf("Enter the infix operation: ");
gets(string);
fflush(stdin);
for(i=0;string[i]!='\0';i++)
{
ch=string[i];
if( ((ch>='a') && (ch<='z'))||((ch>='A') &&(ch<='Z')) )
{
printf("%c",string[i]);
}
else
{
ch=string[i];
top=PUSH(stack,top,ch);
}
top=POP(stack,top);
}
return 0;
}

最佳答案

在 main 函数中,在 for loop End 之后添加这三行。并删除 top=POP(stack,top); 在for循环里面。

 while(top!=-1)
top=POP(stack,top);
printf("\n");

修改后的主要功能:

int main()
{
char string[15],ch;
int top=-1,i;

printf("Enter the infix operation: ");
gets(string);
fflush(stdin);
for(i=0;string[i]!='\0';i++)
{
ch=string[i];
if( ((ch>='a') && (ch<='z'))||((ch>='A') &&(ch<='Z')) )
{
printf("%c",string[i]);
}
else
{
ch=string[i];
top=PUSH(stack,top,ch);
}

}
while(top!=-1)
top=POP(stack,top);
printf("\n");
return 0;
}

关于c - 在更新顶级变量时使用堆栈错误中缀到后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com