C++ 中缀表达式转后缀表达式 (修复后代码)
C++ 中缀表达式转后缀表达式 (修复后代码)
之前的代码存在问题,没有将操作数放入转换后的后缀表达式中。非常抱歉造成的不便!以下代码已修复此问题:cpp#include
// 判断字符是否为运算符bool isOperator(char c) { if (c == '+' || c == '-' || c == '*' || c == '/') { return true; } return false;}
// 判断字符是否为左括号bool isLeftParenthesis(char c) { if (c == '(') { return true; } return false;}
// 判断字符是否为右括号bool isRightParenthesis(char c) { if (c == ')') { return true; } return false;}
// 判断运算符的优先级int getPriority(char op) { if (op == '*' || op == '/') { return 2; } else if (op == '+' || op == '-') { return 1; } return 0;}
// 将中缀表达式转换为后缀表达式std::string infixToPostfix(const std::string& infixExpression) { std::stack
for (int i = 0; i < infixExpression.length(); i++) { char c = infixExpression[i];
if (isOperator(c)) { while (!operatorStack.empty() && isOperator(operatorStack.top()) && getPriority(operatorStack.top()) >= getPriority(c)) { postfixExpression += operatorStack.top(); operatorStack.pop(); } operatorStack.push(c); } else if (isLeftParenthesis(c)) { operatorStack.push(c); } else if (isRightParenthesis(c)) { while (!operatorStack.empty() && !isLeftParenthesis(operatorStack.top())) { postfixExpression += operatorStack.top(); operatorStack.pop(); } if (!operatorStack.empty() && isLeftParenthesis(operatorStack.top())) { operatorStack.pop(); } else { // 括号不配对,返回空字符串表示出错 return ''; } } else { // 操作数直接添加到后缀表达式中 postfixExpression += c; } }
while (!operatorStack.empty()) { if (isLeftParenthesis(operatorStack.top()) || isRightParenthesis(operatorStack.top())) { // 括号不配对,返回空字符串表示出错 return ''; } postfixExpression += operatorStack.top(); operatorStack.pop(); }
return postfixExpression;}
int main() { std::string infixExpression; std::cout << '请输入中缀表达式:'; std::cin >> infixExpression;
std::string postfixExpression = infixToPostfix(infixExpression); if (postfixExpression == '') { std::cout << '表达式不合法!' << std::endl; } else { std::cout << '后缀表达式:' << postfixExpression << std::endl; }
return 0;}
示例输入:(a*b-(c+d)/e)
**示例输出:**后缀表达式:ab*cd+e/-
现在,代码会将操作数也包含在转换后的后缀表达式中。再次对之前的错误表示歉意,希望这次的代码能满足你的需求。
原文地址: http://www.cveoy.top/t/topic/bfGn 著作权归作者所有。请勿转载和采集!