#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()); } }