Ich versuche, einen Postfix-Ausdruck Rechner, aber ich steckte auf ein Problem. Der Rechner gibt die falsche Antwort zurück und ich weiß nicht warum. Ich habe das Programm Zeile für Zeile verfolgt und nichts sollte falsch sein. her mein Code so weit:C++ Postfix Rechner mit Stacks
char expression[] = {"321*+"};
int number1, number2;
char *pExpression = &expression[0];
char symbole;
PileInt pile;
pile.init(5);
while(*pExpression){
symbole = *pExpression;
if(symbole == '+' || symbole == '-' || symbole == '*' || symbole == '/'){
switch (symbole){
case '+':
number2 = pile.pop();
number1 = pile.pop();
pile.push(number1 + number2);
break;
case '-':
number2 = pile.pop();
number1 = pile.pop();
pile.push(number1 - number2);
break;
case '*':
number2 = pile.pop();
number1 = pile.pop();
pile.push(number1 * number2);
break;
case '/':
number2 = pile.pop();
number1 = pile.pop();
pile.push(number1/number2);
break;
}
} else pile.push(symbole);
pExpression++;
}
cout<<pile.pop()<<endl;
und here die Methoden:
void PileInt::init(int taille){ //Methode pour initialiser une pile d'entier
_addr = new int [ _taille = taille ];
assert(_addr != 0);
_sommet = 0;
}
void PileInt::push(int n){ //Methode pour mettre un entier au dessus de la pile
if (! pleine())
_addr[ _sommet++ ] = n;
}
int PileInt::pop(){ //Methode pour sortir l'entier au dessus de la pile
return (! vide()) ? _addr[ --_sommet ] : 0;
}
int PileInt::top(){
if(! vide())
return (_sommet - 1);
}
Ausdruck: 321 * + Konsole kehrt 2501, sollte es zurückgeben 5. Vielen Dank im Voraus.
Sie wissen, dass Sie die if-Anweisung entfernen könnte und die andere in den Standardfall des Schalters – Ceros
Ihr Stack Methoden bewegen scheitern still. Es würde mehr Sinn für sie machen, Ausnahmen zu werfen, oder zumindest Debug-Nachrichten zu drucken, – EJP