You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++后缀表达式求值代码如何支持多位数字操作数

后缀表达式多位数支持修改方案

原有代码核心问题

  • 每次仅读取单个数字字符压栈,未处理连续数字拼接多位数的场景
  • 代码存在逻辑错误:取出op1后调用stk.top()未执行弹出操作,会导致栈残留元素异常
  • 无操作数边界区分规则,没有分隔符的场景下无法判定多位数的起止(比如213+无法区分是21+3还是2+13),因此约定后缀表达式的操作数、运算符之间用空格分隔,测试用例输入调整为21 3 +

具体修改方案

  1. 遍历字符串时新增空格跳过逻辑,处理分隔符
  2. 遇到数字时循环读取后续所有连续数字字符,拼接为完整整数后转换为数值压栈,同时移动遍历下标跳过已处理的数字位
  3. 修复op1弹出的逻辑错误

修改后完整代码

#include <iostream>
#include <string>
#include <stack>
#include <cctype>
using namespace std;

float postix_evalute(string expr)
{
    stack<float> stk;
    int x = 0;
    while (x < expr.length())
    {
        // 跳过空格分隔符
        if (isspace(expr[x]))
        {
            x++;
            continue;
        }
        // 处理多位数
        if (isdigit(expr[x]))
        {
            float num = 0;
            // 连续读取所有数字字符拼接为完整数值
            while (x < expr.length() && isdigit(expr[x]))
            {
                num = num * 10 + (expr[x] - '0');
                x++;
            }
            stk.push(num);
        }
        else
        {
            float val;
            float op2 = stk.top();
            stk.pop();
            float op1 = stk.top();
            stk.pop(); // 修复原有代码此处的弹出错误
            switch (expr[x])
            {
            case '+':
                val = op1 + op2;
                break;
            case '-':
                val = op1 - op2;
                break;
            case '*':
                val = op1 * op2;
                break;
            case '/':
                val = op1 / op2;
                break;
            }
            stk.push(val);
            x++;
        }
    }
    return stk.top();
}

int main()
{
    string line;
    cout << "请输入以空格分隔的后缀表达式:" << endl;
    getline(cin, line); // 改用getline读取带空格的输入
    cout << postix_evalute(line) << endl;
    return 0;
}

效果验证

输入测试用例21 3 +,输出结果为24,符合预期。如果需要支持小数操作数,只需要在数字处理逻辑中新增小数点的判断和拼接逻辑即可。

内容的提问来源于stack exchange,提问作者golden_hacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:03