当前位置: 首页 > news >正文

1042: 中缀表达式转换为后缀表达式

解法:直接给算法

  1. 创建一个栈和一个空的后缀表达式字符串。

  2. 遍历中缀表达式中的每个字符。

  3. 如果当前字符是操作数,直接将其添加到后缀表达式字符串中。

  4. 如果当前字符是操作符,需要将其与栈顶的操作符进行比较:

    • 如果栈为空,或者栈顶操作符是左括号'(',则将当前操作符压入栈中。

    • 如果当前操作符的优先级大于栈顶操作符的优先级,将当前操作符压入栈中。

    • 如果当前操作符的优先级小于等于栈顶操作符的优先级,将栈顶操作符弹出并添加到后缀表达式字符串中,然后继续比较当前操作符与新的栈顶操作符,直到符合压入条件。

  5. 如果当前字符是'(',将其压入栈中。

  6. 如果当前字符是')',需要将栈中的操作符弹出并添加到后缀表达式字符串中,直到遇到左括号为止。将左括号弹出,但不添加到后缀表达式字符串中。

  7. 遍历完所有字符后,将栈中剩余的操作符弹出并添加到后缀表达式字符串中。

  8. 返回后缀表达式字符串。

原则就是:有括号先算括号里的,先乘除(优先级2),再加减(优先级1)

#include<iostream>
#include<string>
#include<stack>
using namespace std;bool isop(char c) {if (c == '+' || c == '-' || c == '*' || c == '/') {return true;}else return false;
}
int jibie(char op) {if (op == '+' || op == '-') {return 1;}else if (op == '*' || op == '/') {return 2;}return 0;
}
string trans(string s) {string p;stack<char> sk;for (int i = 0; i < s.size(); i++) {char c = s[i];if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') {p += c;}else if (isop(c)) {while (!sk.empty() && jibie(sk.top()) >= jibie(c)) {p += sk.top();sk.pop();}sk.push(c);}else if (c=='(') {sk.push(c);}else if (c == ')') {while (!sk.empty() && sk.top() != '(') {p += sk.top();sk.pop();}sk.pop();}}while (!sk.empty()) {p += sk.top();sk.pop();}return p;
}
int main() {string str;cin >> str;cout << trans(str);return 0;
}

http://www.lryc.cn/news/339537.html

相关文章:

  • 避免上下文切换--Linux原子函数
  • 塔面板php7.37.4版本不支持ZipArchive手工安装扩展方法
  • go语言并发实战——日志收集系统(一) 项目前言
  • Android Studio 之 Intent及其参数传递
  • 【黑马头条】-day06自媒体文章上下架-Kafka
  • 非线性特征曲线线性化插补器(CODESYS 完整ST代码)
  • vue3从精通到入门4:diff算法的实现
  • (三)C++自制植物大战僵尸游戏项目结构说明
  • 动态规划专练( 279.完全平方数)
  • 京东商品详情API接口(商品属性丨sku价格丨详情图丨标题等数据)
  • Springboot+Vue项目-基于Java+MySQL的校园周边美食探索及分享平台系统(附源码+演示视频+LW)
  • 折叠面板组件(vue)
  • 【Canvas技法】蓝底金字北岛诗节选(径向渐变色、文字阴影示例)
  • 【大语言模型】基础:TF-IDF
  • [开发日志系列]PDF图书在线系统20240415
  • 蓝桥杯 — — 纯质数
  • OpenCV基本图像处理操作(三)——图像轮廓
  • 比特币突然暴跌
  • 使用SpeechRecognition和vosk处理ASR
  • 【Go】通道:缓冲通道和非缓冲通道
  • Java中数组的使用
  • CAP5_Monday
  • 科大讯飞星火开源大模型iFlytekSpark-13B GPU版部署方法
  • SpringBoot基于RabbitMQ实现消息延迟队列方案
  • Go语言使用标准库时常见错误
  • UE5不打包启用像素流 ubuntu22.04
  • Redis 常用数据类型常用命令和应用场景
  • ins视频批量下载,instagram批量爬取视频信息
  • Canvas图形编辑器-数据结构与History(undo/redo)
  • 阿里云Centos7下编译glibc