我的代碼運行良好,令我驚喜! 唯一的問題是,無論何時使用括號中綴輸入,它都會在後綴表達式結尾處出現'J'!有什麼建議麼?? 這裏的算法是最基本的算法,所有的表達式都被轉換,所有的都是正確的,但是尾部的'J'是我無法理解的!建議?堆棧中綴到後綴
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 50
char stack[MAX];
int top = -1;
void push(char element)
{
stack[++top] = element;
}
char pop()
{
return(stack[top--]);
}
char tope()
{
return(stack[top]);
}
int prec(char c)
{
switch(c){
case '+':
case '-' : return 1;
break;
case '*' :
case '/' : return 2;
break;
default:
return 0;
break;
}
}
int main()
{
char post[MAX],in[MAX],ch,element;
printf("Infix expression : ");
scanf("%s",in);
int i=0,k=0;
in[strlen(in)] = ')';
push('(');
while((ch = in[i++]) != '\0')
{
if(isalnum(ch))
post[k++] = ch;
if(ch == '(')
push(ch);
if(ch == ')')
{
while(tope() != '(')
{
post[k++] = pop();
}
pop();
}
if(ch == '+' || ch =='-' || ch == '*' || ch == '/')
{
while(prec(ch) <= prec(tope()))
{
post[k++] = pop();
}
push(ch);
}
}
post[k] = '\0';
printf("%s",post);
return 0;
}
爲什麼不把''''作爲''''來處理空字符,而不是將'''添加到字符串的末尾? – Barmar
是的,Barmar,這是一個解決方案,但我想以不同的方式做到這一點! –