使用堆栈的 C++ 后缀计算器
C++ Postfix calculator using stacks
我正在尝试使用后缀表达式计算器,但遇到了一个问题。计算器 return 的答案是错误的,我不知道为什么。我已经逐行执行了程序,应该没有错。到目前为止,这是我的代码:
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*+
控制台returns 2501,应该return 5. 先谢谢了。
当你有一个数字时 - 你正在推动它的 ASCII 值。
你需要推动它的价值所以改变
pile.push(symbole);
至
pile.push(symbole - '0');
我正在尝试使用后缀表达式计算器,但遇到了一个问题。计算器 return 的答案是错误的,我不知道为什么。我已经逐行执行了程序,应该没有错。到目前为止,这是我的代码:
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*+ 控制台returns 2501,应该return 5. 先谢谢了。
当你有一个数字时 - 你正在推动它的 ASCII 值。
你需要推动它的价值所以改变
pile.push(symbole);
至
pile.push(symbole - '0');