我想要一个后缀表达式计算器,但我坚持一个问题。计算器返回错误的答案,我不知道为什么。我一直沿着程序行,没有什么应该是错的。继承人到目前为止我的代码:使用堆栈的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.谢谢你在前进。
你知道if语句,你可以删除和移动否则到交换机 – Ceros
你堆栈方法的默认情况下,默默地失败。对他们来说更有意义的是抛出异常,或者至少打印调试信息, – EJP