2016-04-08 79 views
0

我想要一个后缀表达式计算器,但我坚持一个问题。计算器返回错误的答案,我不知道为什么。我一直沿着程序行,没有什么应该是错的。继承人到目前为止我的代码:使用堆栈的C++后缀计算器

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; 

和继承人的方法:

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); 
} 

表达:321 * + 控制台返回2501,它应该返回5.谢谢你在前进。

+0

你知道if语句,你可以删除和移动否则到交换机 – Ceros

+0

你堆栈方法的默认情况下,默默地失败。对他们来说更有意义的是抛出异常,或者至少打印调试信息, – EJP

回答

4

当你有一个号码 - 你正在推动它的ASCII值。

您需要推动它的价值,从而改变

pile.push(symbole); 

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

我爱你Ed! –

+0

为了清晰起见,会更好吗? –

+0

@VendettaHazard - 稳重 - 我们只是见面! –