C++ 中缀表达式转后缀表达式 (修复后代码)

之前的代码存在问题,没有将操作数放入转换后的后缀表达式中。非常抱歉造成的不便!以下代码已修复此问题:cpp#include #include #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 operatorStack; std::string postfixExpression;

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/-

现在,代码会将操作数也包含在转换后的后缀表达式中。再次对之前的错误表示歉意,希望这次的代码能满足你的需求。

C++ 中缀表达式转后缀表达式 (修复后代码)

原文地址: http://www.cveoy.top/t/topic/bfGn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录