我想將中綴轉換爲後綴表達式。這是我的代碼:使用堆棧中綴到後綴轉換器
問題是,這實際上不這樣做,我很困惑爲什麼。一切都對我有意義,但是當我輸入例如4*5
作爲輸出我得到同樣的東西。 infix是一個輸入,後綴是我想返回作爲指向後綴的指針,因此可以進行評估。如果是
操作返回true * - +或/
UPDATE:
OKI我得到它的工作,但我有麻煩搞清楚什麼,如果你輸入像5 * 3 + -1.2那麼它不如果你想要像負數一樣工作。
void infix2postfix(char* infix, char* postfix){
char *in,*post;
Stack<char>Q;
char n;
in = &infix[0];
post = &postfix[0];
while(*in){
while(*in == ' ' || *in == '\t'){
in++;
}
if(isdigit(*in) || isalpha(*in)){
while(isdigit(*in) || isalpha(*in)){
*post = *in;
post++;
in++;
}
}
if(*in == '('){
Q.Push(*in);
in++;
}
if(*in == ')'){
n = Q.Pop();
while(n != '('){
*post = n;
post++;
n = Q.Pop();
}
in++;
}
if(operand(*in)){
if(Q.IsEmpty())
Q.Push(*in);
else{
n = Q.Pop();
while(priority(n) >= priority(*in)){
*post = n;
post++;
n = Q.Pop();
}
Q.Push(n);
Q.Push(*in);
}
in++;
}
}
while(!Q.IsEmpty())
{
n = Q.Pop();
*post = n;
post++;
}
*post = '\0';
}
這裏是我的代碼的新代碼,它的工作原理,但我希望它與一元運營商合作,因此將採取輸入4 * 5 + 4 + -1.2
,所以之間的空間,如果沒有那麼它是例如-1.2負數。我的代碼也不適用於超過9的整數,如果我把10放在1 * 0上。 。
試着調試你的代碼?在Visual Studio中,您可以按F10逐行執行您的代碼。 – atoMerz
@AtoMerZ我嘗試過,但我沒有真正瞭解它。 –
當我遇到這樣的問題時,我嘗試按照以前建議的方式逐行執行我的代碼。仔細觀察變量值和預期行爲。最終我找到了錯誤點。 – atoMerz