2016-04-08 20 views
0

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.

+0

Sie wissen, dass Sie die if-Anweisung entfernen könnte und die andere in den Standardfall des Schalters – Ceros

+0

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

Antwort

4

Wenn Sie eine Nummer haben - Sie drücken auf ihren ASCII-Wert.

Sie müssen sich auf ihren Wert drücken, so

ändern
pile.push(symbole); 

zu

pile.push(symbole - '0'); 
+0

Ich liebe dich Ed !! –

+0

Wäre es besser, für Klarheit zu werfen? –

+0

@VendettaHazard - Steady on - Wir haben uns gerade erst getroffen! –