ZBLOG

#include #include #include #include class Express { private: std::string infix; public: Express(const std::string& exp) : infix(exp) {} bool isMatch() { std::stack s; for ...

你的代码实现了一个简单的中缀表达式到后缀表达式(逆波兰表示法)的转换,并且能够计算其结果。这个程序具备以下功能:

  1. 括号匹配检查:使用栈来验证输入的中缀表达式中的括号是否匹配。
  2. 中缀转后缀:实现了中缀表达式转后缀表达式的方法,将运算符和操作数正确处理,确保优先级和括号关系。
  3. 计算后缀表达式:利用栈来求值后缀表达式。

然而,代码有一些小问题需要注意:

  1. Trans方法中,当输出后缀表达式时,每个数字前面都加了空格,而且在处理第一个数字的时候没有预留空格,所以会导致输出的后缀表达式多出一个空格。
   output << ' '; // 这一行可以改为在遇到第一个操作数时不加上空格
  1. GetValue方法应该确认读入每个token,如果是负数或可能的操作符,可以考虑更复杂的分割逻辑。

  2. 对于支持浮点数、更多类型运算符等扩展,可能需要进一步开发。

下面是经过小修改后的部分,以提高可读性和避免不必要的空格:

std::string Trans() {
    std::stack<char> opStack;
    std::ostringstream output;
    bool firstOutput = true; // 新增标志位

    for (char ch : infix) {
        if (isdigit(ch)) { 
            if (!firstOutput) output << ' '; // 添加空格
            output << ch; // 添加数字
            firstOutput = false; // 标记为已输出过第一个数字
        } 
        else if (ch == ' ') {  
            continue; // 跳过空格
        } 
        else { 
            if (!firstOutput) output << ' '; // 在每个运算符前添加空格
            if (ch == '(') {
                opStack.push(ch);
            }
            else if (ch == ')') {
                while (!opStack.empty() && opStack.top() != '(') {
                    output << opStack.top();
                    opStack.pop();
                }
                opStack.pop(); // 弹出左括号
            } 
            else {  
                while (!opStack.empty() && precedence(opStack.top()) >= precedence(ch)) {
                    output << opStack.top();
                    opStack.pop();
                }
                opStack.push(ch); // 当前运算符入栈
            }
        }
    }

    while (!opStack.empty()) { 
        output << ' ' << opStack.top(); // 输出栈顶元素并添加空格分隔
        opStack.pop();
    }

    return output.str();
}

整体结构清晰明了,可以根据需要进行扩展,比如支持更多数学运算、错误处理等等。如果你有其他特定需求或问题,欢迎随时提问!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20563

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?