我想处理字符(运算符)来运算一些数字。但关键是角色来自堆栈。当我声明Char类型的堆栈并通过使用top()方法获取character(operator)时,它在strchr函数中不起作用。我不知道为什么。我真的想知道如何解决它,怎么了?
这是在C ++编程中。
这是我的主要代码
int main() {
string c;
stack<char> postfix_expression;
double result = 0;
postfix_expression.push('+');
postfix_expression.push('1');
postfix_expression.push('3');
result = read_and_evaluate(postfix_expression);
cout << result << endl;
return 0;
}
这是我的read_and_evaluate函数。
double read_and_evaluate(stack<char>& arithmetic_expression ){
stack<double> numbers;
for(int i =0; i < arithmetic_expression.size() ; ++i){
char c = arithmetic_expression.top();
if (isdigit(c)){
numbers.push((double)c - 48);
cout << (int)c - 48 << endl;
}else if(strchr("+-*/", c) != NULL){
evaluate_stack(numbers, c);
cout << c << endl;
cout << numbers.top() << endl;
}
arithmetic_expression.pop();
}
return numbers.top();
}
这是Evaluation_stack函数
void evaluate_stack(stack<double>& operands, char operators) {
double operand2 = operands.top();
operands.pop();
double operand1 = operands.top();
operands.pop();
switch(operators) {
case '+':
operands.push(operand1 + operand2);
case '-':
operands.push(operand1 - operand2);
case '*':
operands.push(operand1 * operand2);
case '/':
if (operand2 != 0.0)
operands.push(operand1 / operand2);
else {
cout << "Error!: divide by zero\n";
break;
}
default:
break;
}
cout << operands.top() << endl;
}
关于后缀表达。我想得到3 1 + 4的结果。 但是它只显示3 1 1.。
答案 0 :(得分:0)
抬起头来
for(int i =0; i < arithmetic_expression.size() ; ++i){
...
arithmetic_expression.pop();
}
在逻辑上不正确。当您弹出堆栈顶部时,堆栈大小将减小1。通过增加i
并将其与堆栈大小进行比较,您最终将忽略堆栈的一半。您可以使用以下方法解决此问题:
// There is no need for i
for ( ; arithmetic_expression.size() > 0; arithmetic_expression.pop()) {
...
}