-1
我被告知要編寫一個程序,使用堆棧將前綴形式轉換爲後綴形式。
當我使用紙和鉛筆來實現該功能時,我現在的輸出應該是正確的。但是,命令窗口中顯示的結果很奇怪。使用堆棧將前綴轉換爲後綴
實際輸出:
prefix : A
postfix : A
prefix : +*AB/CD
postfix : AB*CD/+
prefix : +-*$ABCD//EF+GH
postfix : AB$C*D-EF/GH+/H
prefix : +D/E+$*ABCF
postfix : DEAB*C$F+/F
prefix : /-*A+BCD-E+FG
postfix : ABC+DEFG+-+FG
正確的輸出:
prefix : A
postfix : A
prefix : +*AB/CD
postfix : AB*CD/+
prefix : +-*$ABCD//EF+GH
postfix : AB$C*D-EF/GH+/+
prefix : +D/E+$*ABCF
postfix : DEAB*C$F+/+
prefix : /-*A+BCD-E+FG
postfix : ABC+*D-EFG+-/
代碼:
void prefix_to_postfix(string& prefix, string& postfix)
{
//Convert the input prefix expression to postfix format
postfix = prefix; //initialize the postfix string to the same length of the prefix string
stack<stackItem> S;
stackItem x;
int k = 0; //index for accessing char of the postfix string
for (int i = 0; i < prefix.length(); i++) //process each char in the prefix string from left to right
{
char c = prefix[i];
if(prefix.length() == 1)
break;
//Implement the body of the for-loop
if(isOperator(c))
{
x.symb = c;
x.count = 0;
S.push(x);
}
else
{
S.top().count++;
postfix[k++] = c;
if(S.top().count == 2)
{
postfix[k++] = S.top().symb;
S.pop();
S.top().count++;
}
}
if(i == (prefix.length() - 1))
{
postfix[k++] = S.top().symb;
S.pop();
}
}
}