Мне нужна помощь для преобразования из инфикса в постфикс в C

#c #data-structures #stack #postfix-notation #infix-notation

#c #структуры данных #стек #постфиксная нотация #инфиксная нотация

Вопрос:

Я занимался некоторыми проблемами со структурами данных, которые я делал ранее, но на этот раз я не знаю, что происходит не так в моем коде. Я долго смотрел, но не нашел ошибку. Когда я печатаю, я просто получаю первый символ, и похоже, что e не обновляется. Но я написал e .

 #include<stdio.h>
#include "ctype.h"
int stack[20];
int top = -1;

void push(int x)
{
    stack[  top] = x;
}

int pop()
{
    return stack[top--];
}
int priorityof(char x)
{
    if(x=='(')
        return 3;
    else if(x==' '|| x=='-')
        return 1;
    else if(x=='*'|| x=='/')
        return 2;
}

int main()
{
    char exp[20];
    char *e;
    e=exp;char x;
    scanf("%c",exp);
    while(*e!='')
    {
        if(isalnum(*e))
        {
            printf("%c", *e);
        }
        else if(*e=='(')
        {
            push(*e);
        }
        else if(*e==')')
        {
            while((x=pop())!='(')
                printf("%c",x);
        }
        else {
            while (priorityof(stack[top]) >= priorityof(*e)) {
                printf("%c", pop());
                push(*e);
            }

        }
        e  ;
    }
    while(top!=-1)
    {
        printf("%c",pop());
    }
}
  

Комментарии:

1. Что такое ввод? Вы имели в виду прочитать строку? Потому что вы scanf("%c" читаете один символ, а не строку %s .

2. Понял. Спасибо

Ответ №1:

%c предназначен для одного символа, и, читая ваш вопрос, кажется, что вы указываете более одного символа, поэтому используйте строку %s .

 
#include<stdio.h>
 #include "ctype.h" 
int stack[20]; int top = -1;
 void push(int x) { 
stack[  top] = x;
 } 
int pop() { return stack[top--]; } 
int priorityof(char x) {
 if(x=='(') return 3;
 else if(x==' '|| x=='-') return 1;
 else if(x=='*'|| x=='/') return 2;
 } 
int main() { 
char exp[20]; 
char *e; 
e=exp;char x; 
scanf("%s",exp); 
while(*e!='') { if(isalnum(*e)) { printf("%c", *e); } else if(*e=='(') { push(*e); } else if(*e==')') { while((x=pop())!='(') printf("%c",x); } else { while (priorityof(stack[top]) >= priorityof(*e)) { printf("%c", pop()); push(*e); } } e  ; } while(top!=-1) { printf("%c",pop()); } }