gpt4 book ai didi

c++ - 我的代码使用 strchr 有什么问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:19 26 4
gpt4 key购买 nike

我想处理字符(运算符)来操作一些数字。但关键是角色来自堆栈。当我声明 Char 类型堆栈并使用 top() 方法获取字符(运算符)时,它在 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();
}

这是 evaluate_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。

最佳答案

提醒一下。

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()) {

...

}

关于c++ - 我的代码使用 strchr 有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58515739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com