中缀转后缀表达式无输出问题求助(限用数组与字符串)
嘿,我来帮你揪揪这个没输出的问题!你说实现中缀转后缀但完全没结果,结合你给出的代码片段,我先梳理几个最可能踩的坑,毕竟你只能用数组和字符串,咱们从基础细节查起:
栈操作的基础逻辑错误:你用
string stack作为栈容器,初始top=-1,那push函数的实现是不是有问题?比如正确的push逻辑应该是先把top加1,再给对应位置赋值(stack[++top] = op;)。要是你搞反了顺序,或者直接用stack.push_back(op)但忘了同步更新top值,后续的栈操作全都会出错,要么写不到正确位置,要么读取栈顶时拿错内容,最终导致后缀表达式根本没被正确构建。核心转换逻辑缺失:你只贴了栈的初始化和
push的开头,是不是还没写完中缀表达式的遍历逻辑?比如有没有逐个读取输入的字符,判断它是操作数、运算符还是括号?如果连遍历输入的步骤都没做,那自然不会生成任何后缀表达式内容,输出当然为空。输出环节被遗漏:就算你已经完成了转换,有没有把最终生成的后缀表达式用
cout打印出来?很多时候忙活半天写转换逻辑,最后忘了把结果输出,那肯定看不到任何内容。栈的剩余运算符未弹出:转换结束后,栈里可能还剩未处理的运算符,你有没有把它们全部弹出并追加到后缀表达式里?如果这一步没做,后缀表达式可能不完整,甚至是空的(比如全是运算符的极端情况)。
给你一个简单的完整参考示例,你可以对照着检查自己的代码:
#include<iostream> #include<string> using namespace std; string opStack; int top = -1; // 入栈操作 void push(char op) { // 用string的push_back更安全,避免数组越界问题 opStack.push_back(op); top++; } // 出栈操作 char pop() { if (top == -1) return '\0'; // 栈空返回空字符 char op = opStack[top]; opStack.pop_back(); top--; return op; } // 判断运算符优先级 int precedence(char op) { if (op == '+' || op == '-') return 1; if (op == '*' || op == '/') return 2; return 0; // 括号或其他字符优先级最低 } // 中缀转后缀核心函数 string infixToPostfix(string infix) { string postfix; for (char c : infix) { // 操作数直接加入后缀表达式 if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) { postfix += c; } // 左括号直接入栈 else if (c == '(') { push(c); } // 右括号:弹出到左括号为止 else if (c == ')') { while (top != -1 && opStack[top] != '(') { postfix += pop(); } pop(); // 弹出左括号,不加入后缀 } // 处理运算符:按优先级弹出栈顶运算符 else { while (top != -1 && precedence(opStack[top]) >= precedence(c)) { postfix += pop(); } push(c); } } // 弹出栈中剩余的所有运算符 while (top != -1) { postfix += pop(); } return postfix; } int main() { string infix = "a+b*c"; string result = infixToPostfix(infix); cout << result << endl; // 一定要记得输出结果! return 0; }
你可以重点检查这几点:有没有完整实现pop函数?遍历中缀表达式的循环是不是写了?最后有没有输出转换结果?栈的push/pop操作是不是同步更新了top值?
内容的提问来源于stack exchange,提问作者noobiee

