gpt4 book ai didi

c - 将中缀转换为后缀时出现段错误

转载 作者:行者123 更新时间:2023-11-30 19:29:50 25 4
gpt4 key购买 nike

我正在将 infix 转换为 postfix,这是我的代码,任何人都可以弄清楚为什么我会遇到段错误吗?为什么我会出现段错误?请解释。我尝试了多次,但仍然得到同样的结果。请帮忙。

是因为我占用了多余的内存还是什么?或者我的程序执行时间太长?

    #include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAX 100
char infix[MAX],postfix[MAX];
int top = -1;
char stack[MAX];

void push(char element){
if(top == MAX-1)
{
printf("Error: Stack Overflow\n");
}
else
{
top = top +1;
stack[top] = element;
}
}

char pop(){
if (top == -1)
printf("Error: Stack Underflow\n");
else
{
return stack[top];
top = top -1;
}
}

int precedence(char symbol){

switch(symbol){

case '+':
case '-':
return 2;
break;
case '*':
case '/':
case '%':
return 3;
break;
case '(':
case ')':
case '#':
return 1;
break;
default:
return 0;
break;
}
}

void infixtopostfix(char infix[],char postfix[]){

int i=0,j=0;
char symbol;
stack[++top] = '#';

for (i=0;i<strlen(infix);i++){

symbol = infix[i];

if(isalnum(symbol)){
postfix[j] = symbol;
j++;
}
else if (symbol == '('){
push(symbol);
}
else if (symbol == ')'){

while(stack[top] != '('){
postfix[j] = pop();
j++;
}
pop(); //This will pop out ( from the stack.
}
else{
if (precedence(symbol)>stack[top]){
push(symbol);
}
else{
while(precedence(symbol)<=stack[top]){
postfix[j] = pop();
j++;
}
push(symbol);
}
}
}

while(stack[top] != '#'){

postfix[j] = pop();
j++;
}
postfix[j] = '\0';
}

void main(){


printf("Enter an infix expression:\t");
scanf("%s",infix);

infixtopostfix(infix,postfix);
printf("The infix expression is: %s",infix);
printf("The postfix expression is: %s",postfix);
}

最佳答案

免责声明:我没有仔细查看您的代码,只是粗略地浏览了一下。

您的 pop() 函数格式不正确。

    if (top == -1)
printf("Error: Stack Underflow\n");
else
{
return stack[top];
top = top -1;
}

1) 我很确定这甚至不会编译(或者至少你的 C 编译器会抛出一些错误),因为如果 top == -1,那么这个函数甚至不会返回任何内容。2) 函数在更新“top”之前返回。这意味着顶部递减实际上从未发生,因此堆栈不断地由“顶部”索引。

这可能不是导致段错误的直接原因,但它是一个很好的起点。作为@Ripi2精神的一般建议,我建议您使用调试器(即GDB)、printf语句或内存分析器(例如valgrind)来调试此代码。

关于c - 将中缀转换为后缀时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301014/

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