簡體   English   中英

Infix To Postfix的輸出中沒有運算符和括號

[英]no operators and parenthesis in output of Infix To Postfix

這里我有一個代碼,用於使用堆棧將中綴轉換為后綴

代碼編譯沒有錯誤,但是我的問題是,當我輸入任何前綴時,例如A + B,我得到了AB的后綴,而沒有運算符或括號,我無法解決此問題,明天我要進行考試,請保存我並告訴我在這里不見了,非常感謝.....

#include <iostream>
#include <string.h>
using namespace std;
struct stack
{
int ptr;
char arr[50];
stack()
{
    ptr=0;
}
char top()
{
    return arr[ptr];
}
void push(char ch)
{
    ptr++;
    arr[ptr]=ch;
}
void pop()
{

    ptr-- ;

}
};
void Convert(char[50],char[50]);
bool IsOperand(char);
    bool TakesPrecedence(char,char);
void main()
{
char Reply;
do 
{
    char Infix[50],Postfix[50]="";
    cout<<"Enter an Infix expression: "<<endl;
    cin>>Infix;

    Convert(Infix,Postfix);
    cout<<"The equivalent postfix expression is: "<<endl<<Postfix<<endl;

    cout<<endl<<"Do another (y/n)? ";
    cin>>Reply;

}
while (Reply =='y');
}
void Convert(char Infix[50],char Postfix[50])
{
stack OperatorStack;
char TopSymbol,Symbol;
int L;
for(unsigned k=0;k<strlen(Infix);k++)
{
    Symbol=Infix[k];
    if (IsOperand(Symbol))
    {
        L=strlen(Postfix);
        Postfix[L]=Symbol;
        Postfix[L+1]='\0';

    }
    else
    {
        while ( OperatorStack.ptr && TakesPrecedence(OperatorStack.top(),Symbol))
        {
            TopSymbol= OperatorStack.top();
            OperatorStack.pop();
            L=strlen(Postfix);
            Postfix[L]=TopSymbol;
            Postfix[L+1]='\0';
        }
        if( OperatorStack.ptr && Symbol==')')
            OperatorStack.pop();
        else 
            OperatorStack.push(Symbol);
    }
}
while(OperatorStack.ptr)
{
    TopSymbol=OperatorStack.top();
    OperatorStack.pop();
    L=strlen(Postfix);
    Postfix[L+1]='\0';
}
}
bool IsOperand(char ch)
{
if((ch >='a' &&ch <= 'z') ||(ch >='A' &&ch <= 'Z')||(ch >='0' &&ch <= '9'))
    return true;
else 
    return false;
}
bool TakesPrecedence(char OperatorA,char OperatorB)
{
if(OperatorA='(')
    return false;
else if(OperatorB='(')
    return false;
else if(OperatorB=')')
    return true;
else if(OperatorA='^' && (OperatorB='^'))
    return false;
else if(OperatorA='^')
    return true;
else if(OperatorB='^')
    return false;
else if(OperatorA='*' || (OperatorA='/'))
    return true;
else if(OperatorB='*' || (OperatorB='/'))
    return false;
else
    return true;
}

很確定

if(OperatorA='(')

而所有其他應該是

if(OperatorA=='(')

但是我的主要建議是讓您開始使用調試器。 在調試過程中很容易發現這一點。 我不能太強調了解調試的重要性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM