中缀表达式转逆波兰表达式

2023-05-16

中缀表达式转后缀表达式(逆波兰表达式)

op#(+ , -*,/)
icp06421
isp01536

思路

假设表达式为string ex =" a+(b-c)*d"
将表达式处理为 "a+(b-c)*d#" 以#做末尾标识,
初始时 栈s 中放入一个 # ,int i=0;
icp表示表达式当前扫描项的字符的优先级,isp表示栈顶操作符的优先级 ,优先级表如上
当 栈非空 或 当前扫描项 ex [i]不是 # 时执行以下操作
	1) if ex非操作符,直接输出,i++;
	2)else if ex为操作符,则
				if  icp>isp, ex[i]入栈
				else if icp<isp 一直出栈,直到icp >=isp
				else if icp == isp //此时为( ) 或 #
				将栈顶元素出栈,读取下一元素
#include <iostream>
#include <string>
#include<stack>
using namespace std;
stack<char> s;
int icp(char ch)
{
    int pr;
    switch (ch)
    {
    case '#':
        pr = 0;
        break;
    case '(':
        pr = 6;
        break;
    case '*':
    case '/':
        pr = 4;
        break;
    case '+':
    case '-':
        pr = 2;
        break;
    case ')':
        pr = 1;
        break;
    }
    return pr;
}
int isp(char ch)
{
    int pr;
    switch (ch)
    {
    case '#':
        pr = 0;
        break;
    case '(':
        pr = 1;
        break;
    case '*':
    case '/':
        pr = 5;
        break;
    case '+':
    case '-':
        pr = 3;
        break;
    case ')':
        pr = 6;
        break;
    }
    return pr;
}
void polish(string a) {

    s.push('#');
    int i = 0;
    while (!s.empty() ||a[i]!='#' ){
        if (a[i] >= 'a' && a[i] <= 'z')
            cout << a[i++] << " ";
        else
        {
            int com = icp(a[i]) - isp(s.top());
            if (com>0)
            {
                s.push(a[i++]);
            }
            else if (com==0)
            {
                if (a[i] != '#')
                i++;
                s.pop();
            }
            else if (com<0)

            {
                cout << s.top() << " ";
                s.pop();
              
            }
        }
    }
};
int main()
{

    string str;
    cin >> str;
    str = str + "#";

    polish(str);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中缀表达式转逆波兰表达式 的相关文章

  • 电脑添加打印机方法/步骤

    方法1 主要有以下几种方法 xff1a 1 新购买的打印机都会有自带的驱动软件安装光盘 xff0c 如果你电脑上有光驱的话 xff0c 直接安装上就可以了 xff1b 如果没有光驱那就到所购买的打印机品牌官网上去找对应型号的驱动下载安装上
  • ssh常见命令

    Linux系统的远程管理工具大概有几种 xff1a telnet xff0c ssh xff0c vnc等 xff0c 其中ssh是最常用的管理方法 xff0c 采用密文的传输方式 xff0c 简单安全 基本用法 最简单的用法就是不带参数
  • 芯片春秋: 开源架构RISC-V前世今生

    不久前 xff0c 特斯拉加入 RISC V基金会 xff0c 并考虑在新款芯片中使用免费的 RISC V 设计 至此 xff0c 已有IBM NXP 西部数据 英伟达 高通 三星 谷歌 华为等100多家科技公司加入RISC V阵营 出现这
  • 华为设备配置——配置通过FTP进行文件操作

    1 实验原理 FTP xff08 File Transfer Protocol xff0c 文件传输协议 xff09 是 TCP IP 协议组中的协议之一 其主要功能是向用户提供本地和远程主机之间的文件传输 xff0c FTP采用C S x
  • Linux学习笔记

    Linux linux的本质是一切皆目录 学习来自哔哩哔哩狂神说 xff0c 视频地址https www bilibili com video BV187411y7hF hostnamectl xff1a 查看linux信息 关机 shut
  • Linux .deb包的安装(gdebi)

    一些废话 deb包可以通过传统的dpkg命令来实现 xff0c 但过程中经常会遇到一些问题 所以有个软件叫GDebi xff0c 可以更加有效的帮助安装deb 通过点击deb包即可实现安装 xff0c 当然 xff0c 也可以通过命令行模式
  • 简单的理解EKF算法1

    简单的理解EKF算法 经典的EKF公式简化版的EKF公式参考资料 经典的EKF公式 来我们先来看一下第一眼看上去不知道在讲啥的公式 1 x k 61 A
  • Myeclipse/Eclipse 如何停止死循环进程

    今天在在练习hibernate 对象导航查询的时候想输出一对多 xff08 客户1 联系人n xff09 关系里面想输出某个客户的所有联系人 xff0c 便用Iterator对set进行遍历 xff0c 顺便看看iterator里面的方法具
  • 如何快速解决zookeeper闪退问题!

    有以下2种情况 xff1a 第一种方法 xff1a 按任意键直接闪退 xff0c 这时我们只需要修改一下配置文件即可 xff0c 右键 zkServer cmd xff0c 编辑文件内容 xff0c 在末尾输入 pause 保存并退出 在双
  • Centos6.8更新yum

    一 重新安装 1 卸载yum CentOS6停止维护更新日期2020年11月30日 下架了包括官方所有的CentOS6源 xff08 包括国内的镜像站 xff09 span class token comment 查看yum span rp
  • Debian 10系统最小化安装

    Debian 10最小化安装 一 Debian系统介绍 广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品 xff0c 由于Debian项目众多内核分支中以Linux宏内核为主 xff0c 而且 Debian开发者 所创建的
  • 在Ubuntu16.04系统下安装Python3.6 + pip3 的完整步骤

    python gt 垃圾垃圾真垃圾 xff08 开玩笑的 xff09 Ubuntu16 04版本最新的Python 3 x为版本3 5 1 要安装Python 3 6 xff0c 请运行以下命令 xff1a wget https www p
  • Ubuntu中的中文字体设置

    首先我们要搞清楚我们要设置的是系统的字体还是Firefox中的字体 一 设置的是Firefox浏览器中的字体 我们只需要在点击浏览器右上角Open menu gt Preferences gt Content gt Fonts amp Co
  • 详解叠瓦式磁记录SMR盘基础知识

    SMR Shingled Magnetic Recording 叠瓦式磁记录盘 是一种采用新型磁存储技术的高容量磁盘 SMR盘将盘片上的数据磁道部分重叠 xff0c 就像屋顶上的瓦片一样 xff0c 这种技术被称为叠瓦式磁记录技术 该技术在
  • 如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?

    最近使用到了mysql connector cpp xff0c 通过这个库获取到的字符串类型是mysql string xff0c 其实其实质就是mysql自己实现的wstring 如果直接进行转换 xff1a mysqlx span cl
  • FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:app:stripDe

    文章目录 问题描述解决方法 问题描述 android studio 编译2012 年的项目时出现了如下问题 xff1a FAILURE Build failed with an exception What went wrong Execu
  • 学习C++:使用C++11实现阻塞队列

    目录 1 代码 1 代码 span class token macro property span class token directive keyword ifndef span BLK QUEUE H span span class
  • Scoop安装遇到 “raw.githubusercontent.com未能解析” 解决方案

    想试试windows包管理器Scoop xff0c 但安装总是报错 xff1a iwr 未能解析此远程名称 39 raw githubusercontent com 39 所在位置 行 1 字符 1 43 iwr useb get scoo
  • Looking in indexes: xxx WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None

    docker 构建python程序报错 Step span class token number 7 span 10 span class token builtin class name span RUN pip3 span class

随机推荐

  • 通过github pages将自己的域名解析到csdn博客

    刚发表了一篇博客 发现做个人工作总结挺好用 鉴于研究生期间每周都要做周总结 xff0c 以后就每周用csdn博客来做总结草稿好了 现在用之前购买的域名来解析到个人博客以便于自己和其他人浏览 总结如下 xff1a 1 申请域名songweib
  • SecoClient在win10系统中连接失败解决方案

    官方的解决方案 xff1a 官方解决方案 解决过程中时遇到的可参考的解决方案 xff1a 可参考的解决方案 以上方案都无法解决的情况下的个人经历 xff1a 1 下午时不断尝试使用SecoClient进行连接但得到的提示都是如下图这样的警告
  • 修复win10启动项

    使用bcdboot修复win10启动项 修复前计算机状态 xff1a 只有win10系统分区 xff0c 没有EFI分区 步骤 xff1a 1 使用DiskGenius创建一个100MB的EFI分区 2 关闭计算机 xff0c 插入系统盘
  • 阿里云主机ubuntu20配置VNC出现的各种问题

    ubuntu可直接拉取安装的VNC软件有如 TightVNC xff0c TigerVNC 和 x11vnc 等 一 安装x11vnc出现的问题 安装x11vnc后发现从外网连接不到x11vnc的5900端口 xff0c 在x11vnc正常
  • 3-5 Linux 配置 yum 源

    1 输入 yum list 查看安装包时 xff0c 出现以下错误 yum 源 xff1a 指定服务器 span class token punctuation span root 64 localhost span class token
  • 针对静默数据错误,如何采用DIX和DIF保证数据一致性?

    静默数据破坏问题是一直存在存储系统中最难解决的数据一致性问题之一 xff0c 无论是传统多控 分布式存储 xff0c 还是公有云存储 对存储系统设计和开发人员来讲 xff0c 数据一致性问题解决能否解决决定着存储系统是否可以商用 到这个问题
  • ModuleNotFoundError: No module named '_ssl'解决方法

    span class token punctuation span root 64 bhs Modules span class token punctuation span span class token comment pwd spa
  • 【Java工具类】Java8之Lambda表达式

    大千世界 xff0c 茫茫人海 xff0c 相识就是一种缘分 若此篇文章对您有帮助 xff0c 点个赞或点个关注呗 xff01 一 Lambda简述 1 1 Lambda概述 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方
  • Ubuntu20.04中安装pycharm社区版本

    Ubuntu20 04中安装pycharm社区版本 目前pycharm的社区版是免费的 xff0c 如果只用python xff0c 社区版能满足要求 下载地址https www jetbrains com zh cn pycharm do
  • android studio 报错:The plugin org.jetbrains.android failed to save settings and has been disabled.

    今天刚打开android studio时候突然出现了一个错误 xff1a The plugin org jetbrains android failed to save settings and has been disabled Plea
  • CMS 02 前端开发

    1 xff0c vue js 研究 1 1 vue js 介绍 1 vue js 是什么 xff1f vue是一套用于构建用户界面的渐进式框架 vue 被设计为可以自底向上逐层应用 0 渐进式框架 xff1a Progressive 说明v
  • 2.从键盘输入两个正整数,输出这两个整数的商,要求商的小数点后保留5位。例如输入355和113,输出3.14159。

    题目 xff1a 从键盘输入两个正整数 xff0c 输出这两个整数的商 xff0c 要求商的小数点后保留5位 例如输入355和113 xff0c 输出3 14159 程序 xff1a include lt stdio h gt void m
  • 你需要烂熟于心的15个常用JS函数

    今天分享一下我日常工作中常用的15个JS函数 xff0c 希望对于你的日常开发有帮助 xff1a 当前浏览器名称 function getExplorer const ua 61 window navigator userAgent con
  • linux 安装yum 安装php

    安装yum sudo apt get update apt get install lrzsz apt install yum apt get install php7 0 libapache2 mod php7 0
  • linux 命令行美化

    vim etc bashrc 添加下面的代码 PS1 PS1 61 34 033 38 5 87m u tput bold tput sgr0 033 38 5 15m 64 tput sgr0 tput sgr0 033 38 5 119
  • Ubuntu18.0下编译opencv c++并配置clion环境

    预编译阶段 先安装一些依赖 span class token function sudo span span class token function apt get span span class token function insta
  • 谈谈CMDB,ITIL和ITSM概念和简史

    CMDB即配置管理数据库 xff0c 存储与管理企业IT架构中设备的各种配置信息 xff0c 它与所有服务支持和服务交付流程都紧密相联 xff0c 支持这些流程的运转 发挥配置信息的价值 xff0c 同时依赖于相关流程保证数据的准确性 如果
  • Java快排实现

    快速排序 xff1a 基本实现思路 取一个标准位置的数字 用其他位置的数字和标准数进行对比 如果比标准数大 则放到标准数的右边 xff0c 如果比标准数小 则放到标准数的左边 然后使用递归进行持续比对 xff08 注意 递归要有入口 如果当
  • Java 后端项目部署到服务器使用ip访问

    Java 后端项目部署到服务器使用ip访问 一 Maven打包项目 打包成功 xff0c 该路径下会生成一个jar包 二 部署项目 打开服务器 创建文件夹目录用于存放上传的jar包并且进入该文件夹 使用rz命令上传打好的jar包 上传完成
  • 中缀表达式转逆波兰表达式

    中缀表达式转后缀表达式 逆波兰表达式 op 43 icp06421isp01536 思路 假设表达式为string ex 61 34 a 43 b c d 34 将表达式处理为 34 a 43 b c d 34 以 做末尾标识 初始时 栈s