2016-04-08 1 views
0

Я пытаюсь вычислить выражение постфикса, но я столкнулся с проблемой. Калькулятор возвращает неправильный ответ, и я не знаю, почему. Я следил за программой по строчке, и ничто не должно быть неправильным. Heres мой код до сих пор:C++ Postfix-калькулятор с использованием стеков

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; 

и Heres методы:

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

Вы знаете, если заявление можно удалить и переместить остальное в случае по умолчанию коммутатора – Ceros

+0

Ваши методы стека терпеть неудачу. Для них было бы больше смысла бросать исключения или, по крайней мере, печатать отладочные сообщения, – EJP

ответ

4

Когда у вас есть номер - вы нажимаете на его значение ASCII.

Вам необходимо нажать на его значение, чтобы изменить

pile.push(symbole); 

в

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

Я люблю тебя, Эд! –

+0

Было бы лучше бросить для ясности? –

+0

@ VendettaHazard - Устойчивый - Мы только встретимся! –

 Смежные вопросы

  • Нет связанных вопросов^_^