Peguin Princess 2024-02-20 18:23 采纳率: 0%
浏览 3

求解简单的后缀表达式 C++

给一个后缀表达式,计算它的值。只有"+"、"-"、"*"三种运算,操作数为0-9。

输入
第一行一个正整数n,表示后缀表达式中元素的个数。

第二行一个后缀表达式。

输出
一个数,后缀表达式的值。

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-20 18:24
    关注

    该回答引用自GPT-3.5,由博主GIS_Liu编写:

    这个问题可以通过使用栈来解决。首先,我们从左到右遍历后缀表达式的每个元素,如果是操作数,则压入栈中;如果是运算符,则从栈中弹出两个操作数进行计算,并将结果压入栈中。最后栈中剩下的元素就是表达式的值。

    具体步骤如下:

    1. 创建一个栈来存储操作数。
    2. 从左到右遍历后缀表达式的每个元素:
      • 如果是操作数,则将其压入栈中。
      • 如果是运算符,则从栈中弹出两个操作数,进行相应的计算,然后将结果压入栈中。
    3. 最后栈中剩下的元素即为后缀表达式的值。

    下面是一个用C++实现的示例代码:

    #include <iostream>
    #include <stack>
    #include <string>
    
    using namespace std;
    
    int evaluatePostfix(const string& postfix) {
        stack<int> operands;
    
        for (char c : postfix) {
            if (isdigit(c)) {
                operands.push(c - '0');
            } else {
                int operand2 = operands.top();
                operands.pop();
                int operand1 = operands.top();
                operands.pop();
                switch (c) {
                    case '+':
                        operands.push(operand1 + operand2);
                        break;
                    case '-':
                        operands.push(operand1 - operand2);
                        break;
                    case '*':
                        operands.push(operand1 * operand2);
                        break;
                    default:
                        throw invalid_argument("Invalid operator");
                }
            }
        }
    
        if (operands.size() != 1) {
            throw invalid_argument("Invalid postfix expression");
        }
    
        return operands.top();
    }
    
    int main() {
        int n;
        string postfix;
        cin >> n >> postfix;
        cout << evaluatePostfix(postfix) << endl;
        return 0;
    }
    

    这段代码首先读取后缀表达式的长度和表达式字符串,然后调用evaluatePostfix函数计算后缀表达式的值,并输出结果。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月20日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画