7-4 表达式转换 (25分)_堆栈-1 表达式转换 (25 分) 算术表达式有前缀表示法、中缀表示法和后缀表示法等形-程序员宅基地

技术标签: c++  题目    队列  数据结构  

7-4 表达式转换 (25分)

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

输入格式:

输入在一行中给出不含空格的中缀表达式,可包含+-*\以及左右括号(),表达式不超过20个字符。

输出格式:

在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

输入样例:

2+3*(7-4)+8/4

输出样例:

2 3 7 4 - * + 8 4 / +

代码如下: 

#include <bits/stdc++.h>
using namespace std;
void to_deal(string str)
{
    stack<char> stk;
    map<char,int> m;
    m['+'] = m['-'] = 1;
    m['*'] = m['/'] = 2;
    m['('] = m[')'] = 3;
    int index = 0;
    bool flag = true;
    while(index < str.size())
    {
        if((index < 1 || str[index - 1] == '(') && (str[index] == '+' || str[index] == '-')  || isdigit(str[index]))
        {
            if(flag) flag = false;
            else printf(" ");
            if(str[index] != '+') printf("%c", str[index]);
            while(str[index + 1] == '.' || isdigit(str[index + 1]))
                printf("%c", str[++index]);
            index++;
        }
        else
        {
            if(str[index] == '(') stk.push(str[index]);
            else if(str[index] == ')')
            {
                while(!stk.empty() && stk.top() != '(')
                {
                    printf(" %c", stk.top());
                    stk.pop();
                }
                stk.pop();
            }
            else
            {
                while(!stk.empty() && stk.top() != '(' && m[stk.top()] >= m[str[index]])
                {
                    printf(" %c", stk.top());
                    stk.pop();
                }
                stk.push(str[index]);
            }
            index++;
        }
    }
    while(!stk.empty())
    {
        printf(" %c", stk.top());
        stk.pop();
    }
}
int main(int argc, char const *argv[])
{
    string str;
    cin>>str;
    to_deal(str);
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Changqing9/article/details/111411405

智能推荐

c语言1 4的商,c语言1-4章题答案.doc-程序员宅基地

文章浏览阅读60次。c语言1-4章题答案1-4章习题习题1-5#includevoid main printf "**************************\n\n" ; printf " Very Good!\n\n" ; printf "**************************\n" ; 习题1-6#includevoid main int a,b,c,max;printf "plea..._c语言的商

Vue集成百度地图实现位置选择_百度地图 vue 搜索下拉选择-程序员宅基地

文章浏览阅读3.7k次,点赞10次,收藏78次。Vue基础百度地图实现位置选择需求:添加门店时,需要选择门店的省、市、区、详细地址、以及门店的经纬度信息。解决方案:集成百度地图API,通过在地图上搜索或者点击获取门店的具体位置信息。......_百度地图 vue 搜索下拉选择

20080529转载:GridView 数据控件的七种字段类型(Fields Type)的应用-程序员宅基地

文章浏览阅读97次。9.8 数据控件的七种字段类型(Fields Type)的应用GridView共支持七种字段类型,字段原本应该叫“Column”比较恰当,但ASP.NET 2.0却采用另一个名称“Field”来表示,对于名称的命名祭司认为有点不直观,因为不明的人看了根本不知道Field代表什么东西,但既然ASP.NET 2.0使用了Field,各位就迁就一下,表9-6为GridView支持七种字段类型的说明..._[datafield("",type=)]

android-高效开发命令汇总-程序员宅基地

文章浏览阅读66次。2019独角兽企业重金招聘Python工程师标准>>> ..._androⅰd编程语句大全 site:blog.csdn.net

linux里命令的对话框whiptail-程序员宅基地

文章浏览阅读272次。Linux里面可以在命令行里形成对话框,用光标上下,左右选择,一屏一屏的问答选择,填写。whiptail是Linux不需要另行安装,默认就有的,其它的比如dialog需要另行安装,很麻烦,虽然功能比较好些。帖一个写好的东西。#!/bin/bashtrap "" 2while truedoOPTION=$(whiptail --title "Email Manager" --n..._linux whiptail 自动关闭

R语言第二章作业_.r .cxrrrr i rrzszdxx人. the rx dyfe.ifdbf. the ddr-程序员宅基地

文章浏览阅读987次,点赞2次,收藏6次。致读者: 博主是一名数据科学与大数据专业大二的学生,真正的一个互联网萌新,写博客一方面是为了记录自己的学习过程中遇到的问题和思考,一方面是希望能够帮助到很多和自己一样处于困惑的读者。> 由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!之后会写大数据专业的文章哦。GitHub链接https://github.com/wfy-belief尽管现在我的水平可能还不太及格,但我会尽我自己所能,做到最好。——天地有正气,杂然赋流形。下则为河岳,上则为日星。码文不易,可以给我._.r .cxrrrr i rrzszdxx人. the rx dyfe.ifdbf. the ddrxf自然段,人

随便推点

深度学习论文翻译解析(二):An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Ap...-程序员宅基地

文章浏览阅读1.5k次。论文标题:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition论文作者: Baoguang Shi, Xiang Bai and Cong Yao论文代码的下载地址:http://mc.eistar.n..._转录层与连接时间分类

dom4j生成、解析xml-程序员宅基地

文章浏览阅读64次。Java代码 /** *创建xml *@paramobj泛型对象 *@paramentityPropertys泛型对象的List集合 *@paramEncodeXML自定义编码类型 *@paramXMLPathXML文件的路径及文件名..._dom4j生成解析xml

vscode代码格式化js自动换行问题_vscode格式化定义js换行规则-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏8次。vscode代码格式化js自动换行问题如果设置了默认格式化是使用自带JavaScript和Typescript的语言功能会看的吐血类似下面这种// 使用自带JavaScript和Typescript的语言功能 var a = $(this) .closest('.b') .find('.c .d') .val() var e = '<div class="sadasd-asd-sda-ashide">' + $input + '<ul _vscode格式化定义js换行规则

ListView中嵌套ViewPager(ViewPager是item的一部分),并且存在判断位置的小白点。...-程序员宅基地

文章浏览阅读55次。============问题描述============ 被bug困扰了好久:1.白点会出现混乱,有的时候是正常的,有的时候会不动(如果界面只有一个item,白点可以正常切换,有两个item就会不动)。2.当有两个item时,如果滑动上一个item图片与下一个item一样时,下面的item的图片就会消失。本人新手,贴上代码,求各位大神..._listview 嵌套viewpager viewpager item复原

详解三次握手与四次挥手及相关面试题回答_3次握手4次挥手面试怎么回答-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏14次。三次握手含义三次握手其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。TCP报文要想弄懂三次握手,得先从TCP的报文格式入手:有32位的序号和确认序号。 ACK:置为1便是确认连接。 SYN:置为1代表发起一个新连接。 FIN:置为1代表释放一个连接。 具体过程标志位的解释前两次建立连接时._3次握手4次挥手面试怎么回答

(保姆式教学) Win10 + Ubuntu 20.04——双系统安装方法 + 配置显卡 + root权限 + flash调配_双系统安装保姆教程-程序员宅基地

文章浏览阅读9.5w次,点赞209次,收藏1.1k次。这里写自定义目录标题Win10 + Ubuntu 20.04——双系统安装方法 + 配置显卡 + root权限 + flash调配(保姆式教学)请同学们提前准备:第一步:**准备U盘**第二步:**确定自己电脑的类型**第三步:**安装ubuntu镜像**第四步:**为新系统,分配硬件存储空间**第五步:**用UltralSO软碟通,将 UBUNTU 的镜像写入 U盘**最后一步!胜利就在眼前!:**使用U盘,安装新系统**特殊事项root限权问题赠送一条Tip最后的最后Win10 + Ubuntu 20_双系统安装保姆教程