首页 > 其他分享 >19009 后缀表达式

19009 后缀表达式

时间:2024-10-14 22:49:13浏览次数:10  
标签:return 后缀 token int 19009 result expression stack 表达式

### 思路
1. **输入处理**:读取输入的后缀表达式,去掉末尾的`@`符号。
2. **使用栈计算后缀表达式**:
   - 遍历表达式中的每个字符。
   - 如果是数字,压入栈中。
   - 如果是运算符,从栈中弹出两个数字进行运算,并将结果压入栈中。
3. **输出结果**:栈中最后剩下的数字即为表达式的结果。

### 伪代码
```
function evaluate_postfix(expression):
    stack = []

    for token in expression.split():
        if token is a digit:
            stack.push(int(token))
        else if token is an operator:
            b = stack.pop()
            a = stack.pop()
            result = perform_operation(a, b, token)
            stack.push(result)

    return stack.pop()

function perform_operation(a, b, operator):
    if operator == '+':
        return a + b
    if operator == '-':
        return a - b
    if operator == '*':
        return a * b
    if operator == '/':
        return a / b

function main():
    while input is not EOF:
        expression = read_input().strip('@')
        result = evaluate_postfix(expression)
        print(result)
```

### C++代码
 

#include <iostream>
#include <stack>
#include <sstream>
using namespace std;

int perform_operation(int a, int b, char op) {
    switch (op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        default: return 0;
    }
}

int evaluate_postfix(const string& expression) {
    stack<int> s;
    istringstream iss(expression);
    string token;

    while (iss >> token) {
        if (isdigit(token[0])) {
            s.push(stoi(token));
        } else {
            int b = s.top(); s.pop();
            int a = s.top(); s.pop();
            int result = perform_operation(a, b, token[0]);
            s.push(result);
        }
    }

    return s.top();
}

int main() {
    string expression;
    while (getline(cin, expression)) {
        if (expression.back() == '@') {
            expression.pop_back();
            int result = evaluate_postfix(expression);
            cout << result << endl;
        }
    }
    return 0;
}

### 总结
1. **输入处理**:读取并去掉末尾的`@`符号。
2. **使用栈计算后缀表达式**:遍历表达式,数字压栈,运算符弹出两个数字计算并压栈。
3. **输出结果**:栈中最后剩下的数字即为结果。

标签:return,后缀,token,int,19009,result,expression,stack,表达式
From: https://blog.csdn.net/huang1xiao1sheng/article/details/142931027

相关文章

  • 表达式计算,递归的思路,表达式本身的定义就是递归
    #include<iostream>usingnamespacestd;intfactor_value();intterm_value();intexpression_value();intfactor_value()//因子{   intresult=0;   charop=cin.peek();//用op存储缓冲区第一个字符,但并不从键盘缓冲区取走   if(op=='(')//看是......
  • Python - 正则表达式转义注意事项
    无论哪种语言,在使用正则表达式的时候都避免不了一个问题,就是在匹配元字符的时候,需要对元字符进行转义,让正则表达式引擎将其当做普通字符来匹配。本文主要以python为例,说明一下转义中需要注意的问题。python的正则表达式中需要转义的元字符有以下几个:.^$*+?\\[]|{}()......
  • 【转】netcore 下的 C# 表达式求值
    转自:https://www.cnblogs.com/surfsky/p/12918566.html需求场景:表达式为系统功能维护,提取后,将可执行的表达式放入NetCore下if(表达式)来判定是否正确,因维护的表达式为字符串类型,例如"2>1"需要实现if(2>1){//表达式正确逻辑}else{//表达式不成立逻辑} netframewo......
  • day05-Lambda、方法引用、算法、正则表达式
    day05-算法和数据结构一、Arrays类接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些_.1.1Arrays基本使用我们先认识一下Arr......
  • 代码随想录算法训练营day11|150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K
    学习资料:https://programmercarl.com/0150.逆波兰表达式求值.html#算法公开课栈、队列、堆学习记录:150.逆波兰表达式求值(中序表达式转换为后序表达式,用栈实现;遇到符号就从栈中取前两个元素进行运算,再放回去)点击查看代码fromoperatorimportadd,sub,muldefdiv(x,y):......
  • 用布尔表达式巧解数字电路图
    1.前置知识明确AND,OR,XOR,NOR,NOT运算的规则参见:E25.【C语言】练习:修改二进制序列的指定位这里再补充一个布尔运算符:NOR,即先进行OR运算,再进行NOT运算如下图为其数字电路的符号注意到在OR符号的基础上,在尾部加了一个(其实由简化而来)附:NOR的真值表2.R-S触发器(......
  • 常用的校验方法-正则表达式(推荐)
    转载:https://blog.csdn.net/JaveWong/article/details/1202102101、校验数字的表达式数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})......
  • CentOS系统解压缩.7z后缀的文件
    先安装工具sudoyuminstallp7zipp7zip-plugins解压缩7zxmvtec3d.7zx参数表示解压并保持原有目录结构。有报错7-Zip[64]16.02:Copyright(c)1999-2016IgorPavlov:2016-05-21p7zipVersion16.02(locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64bits,6......
  • 转:C# 正则表达式提取指定文本内的内容
    C#正则表达式提取指定文本内的内容_c#正则表达式提取文本-CSDN博客///<summary>///截取字符串中开始和结束字符串中间的字符串///</summary>///<paramname="source">源字符串</param>///<paramname="startStr">开始字符串</param......
  • 中缀表达式转为逆波兰表达式
    中缀表达式转为逆波兰表达式算法步骤:创建一个栈用于存储运算符。输出序列用于保存转换后的逆波兰表达式。遍历中缀表达式的每个字符:如果是操作数(单字母变量),直接加入输出序列。如果是左括号(,则压入栈中。如果是右括号),则弹出栈中的运算符并添加到输出序列,直到遇到左括......