7-20 表达式转换 (25 分)(代码详解+题目分析)

一:题目

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

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

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

输入样例:
2+3*(7-4)+8/4
输出样例:
2 3 7 4 - * + 8 4 / +

二:思路和坑

首先这道题要用到 栈吧 ,然后 就是一个设置运算符的优先级 用到了map ,再者 就是 这个题的例子 贼狗 要考虑 正负号的问题(正号省略不写 但负号 就一定要考虑进去) 其他 一些的优先级 我在次罗列出来

中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。
注意:如果是在括号 中 遇到 (符号优先级的问题时 输出停止条件 中 有 栈顶 不等于 ’(‘)

三:上码(上马 让我们骑马游荡天涯)

/*
中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。
*/#include<bits/stdc++.h>
using namespace std;int main(){stack<char>s;map<char,int>m;//设置符号间的优先级m['+'] = 1; m['-'] = 1;m['*'] = 2; m['/'] = 2;m['('] = 3; m[')'] = 3;int flag = 0;string str;cin >> str;for( int i = 0; i < str.size(); i++ ){//判断代码当中是否有数字 或则小数点 或则是 这个数带符号(负号)  if( ( ((i == 0) || str[i - 1] == '(') && (str[i] == '+' || str[i] == '-'))// 如果是负数则 eg(-10)  其中 i = 0 考虑到 第一个数 如果是 eg +10 || ( str[i] >='0' && str[i] <= '9') || ( str[i] == '.' )){if(flag != 0 ){cout << ' ';	} if( str[i] != '+'){cout << str[i];//此处是如果输出的是负号 则输出 如果是正号则不输出 }//这是要输出的数字eg 5.5 while( (str[i+1] == '.') || (str[i + 1] >= '0' && str[i + 1] <= '9')){ i++;cout << str[i];} flag = 1;} else{if(str[i] == ')'){while(!s.empty() && s.top() != '('){cout << ' ' << s.top();s.pop();	}s.pop();//将栈中的'(' 删除 }else if(s.empty() || m[str[i]] > m[s.top()]){s.push(str[i]);	}else{//将优先级小于str[i] 输出去 但没遇到')' 所以 '(' 不用输出 while( !s.empty() && s.top() != '('){cout << ' ' << s.top();s.pop();	}	s.push(str[i]);} 					} 	}//将栈中剩余的符号输出来while(!s.empty()){cout << ' ' << s.top();s.pop(); } } 

在这里插入图片描述

四:学习总结

做题都一样遇到要考的算法不懂的就学,比如这个题当中这个转换法则就是学的,但是这个题自己做了两遍(每一遍花费4个多小时)都没做出来 ,自己考虑的点 不周 还有 算法 不精湛,最后第三遍 参考了网上大佬的解法 但我都吃透大佬的代码 自己又敲了一遍,菜鸟变大佬 ,我还有很长的路要走 如果你也是 那好 我们一块加油 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构思维其实就那么回事

一提到架构&#xff0c;对于工作经验不多的小伙伴来说会心生敬畏之心。觉得是一个很高端、很难、很有挑战的事情。没错&#xff0c;架构不像我们平时的coding工作&#xff0c;这是一个宏观层面的事情。而对我们内心来说&#xff0c;越宏观、越大的东西&#xff0c;我们总会觉得…

python原理及代码_原理+代码|详解层次聚类及Python实现

前言聚类分析是研究分类问题的分析方法&#xff0c;是洞察用户偏好和做用户画像的利器之一。聚类分析的方法非常多&#xff0c;能够理解经典又最基础的聚类方法 —— 层次聚类法(系统聚类) 的基本原理并将代码用于实际的业务案例是本文的目标&#xff0c;同时这也会为理解后续与…

Java但中获取时间将时间转换成字符串格式(年月日格式)

一:直接上马拿走&#xff1a; package cn.wyj.one;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 测试时间对象和字符串之间的相互转化* DateFormat抽象类和SimpleDateFormat实现类的使用* author 86155**/public class Demo2…

常见的C#异常及其修复方法

常见的C&#xff03;异常及其修复方法如果您今天是依靠编写的软件来谋生&#xff0c;那么您可能至少对异常的概念很熟悉。Jeff Atwood曾经称它们为“现代编程语言的基础”。异常[1]是现代软件开发中常见且有用的结构&#xff0c;但有时它们也可能造成混乱。那么什么是异常&…

python连接mysql查询一个数据_使用Connector / Python连接MySQL/查询数据

使用Connector / Python连接MySQLconnect()构造函数创建到MySQL服务器的连接并返回一个 MySQLConnection对象在python中有以下几种方法可以连接到MySQL数据库&#xff1a;1.使用connect()构造函数import mysql.connectorcnx mysql.connector.connect(userscott, passwordpassw…

java当中日期类的相关操作(学习笔记)

一&#xff1a;引言 Calendar类是日历类&#xff0c;提供操作日历字段的方法&#xff0c;其中有常用操作 get 和 set 方法还有 add方法 详细用法请看码 二&#xff1a;上码 package cn.wyj.one;import java.util.Calendar; import java.util.Date; import java.util.Gregori…

一行代码就可以替换n个仓储文件

&#xff08; 且放白鹿青崖间&#xff0c;须行即骑访名山 &#xff09;终于还是要面对这个问题了&#xff0c;一直想着可以逃避它&#xff0c;自从18年就开始纠结这个问题&#xff0c;后来看了DDD&#xff0c;然后也收集了很多的设计思想&#xff0c;发现一个框架除了稳定性&am…

qt 调用qpainter_在Qt5.4中如何实现QOpenGLWidget和QPainter混合编程

在Qt5.4的Example中&#xff0c;有一个例子qopenglwidget&#xff0c;介绍了QOpenGLWidget和QPainter&#xff0c;但是在使用过程中&#xff0c;需要注意哪些方面呢&#xff1f;我在最初使用的时候就遇到两者不能同时使用的问题&#xff0c;经过一番折腾&#xff0c;终于解决了…

JAVA当中Calendar类打印日历表单

一&#xff1a;引言 代码当中注释很详尽&#xff0c;直接上码&#xff1b; 二&#xff1a;上码 package cn.wyj.one;import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date…

redis storm mysql_flume+kafka+storm+redis/mysql启动命令记录

&#xfeff;&#xfeff;1.flume启动bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name fks -Dflume.root.loggerINFO,console2.启动kafka[rootCassandra kafka]# bin/zookeeper-server-start.sh config/zookeeper.properties&[rootCassandr…

基于.NetCore3.1系列 —— 日志记录之日志配置揭秘

前言在项目的开发维护阶段&#xff0c;有时候我们关注的问题不仅仅在于功能的实现&#xff0c;甚至需要关注系统发布上线后遇到的问题能否及时的查找并解决。所以我们需要有一个好的解决方案来及时的定位错误的根源并做出正确及时的修复&#xff0c;这样才能不影响系统正常的运…

c++将字符串转换成 int 类型

#include<bits/stdc.h> using namespace std;int main() {string str "1233";int temp atoi(str.c_str()); //这里的 atoi的其中的i表示int 类型//如果是 float类型 表示成 atof cout << temp*2;}

learnpython3thehardway视频_LearnPython3theHardWay__Excercise 13 Parameters, Unpacking, Variables

建议ex11-14连起来学习,主要讲input参数&#xff0c;拆包&#xff0c;变量我们继续深入学习input()。在这一节&#xff0c;我们能用另一种 input 方法&#xff0c;传递变量给我们的脚本 ex13. py创建ex13.py文件&#xff0c;然后敲键盘打以下内容并保存from sys import argv# r…

7-21 求前缀表达式的值 (25 分)(思路详解)

一&#xff1a;题目 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前&#xff0c;例如23*(7-4)8/4的前缀表达式是&#xff1a; 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。 输入格式: 输入在一行内给出不超过…

mysql already closed._java.sql.SQLException: Already closed.

问题&#xff1a;SEVERE: Error occured while attempting to query datajava.sql.SQLException: Already closed.at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:114)at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrappe…

java当中递归打印目录树

一&#xff1a;上码 package cn.wyj.one;import java.io.File;public class Demo8_递归打印目录树 {public static void main(String[] args) {File f new File("C:/亚洲");printfile(f,0);}static void printfile(File f,int level){for( int i 0; i < level;…

今天你内卷了吗?

点击蓝字关注&#xff0c;回复“职场进阶”获取职场进阶精品资料一份最近「内卷」这个词大火&#xff0c;朋友圈、知乎、腾讯新闻、B站视频&#xff0c;铺天盖地。大家的议论充满了愤懑、不安、失望和愤怒。那么&#xff0c;什么是内卷&#xff1f;内卷并不是一个新词&#xff…

python中的正则表达式re模块_python中的正则表达式(re模块)

特殊字符"."  &#xff1a; Matches any character except a newline.匹配任何字符 除了换行符"^"  :匹配字符的开头1 importre2 sre.findall(^c234,ac2324)3 s1re.findall(^ac,ac2324)4 print(s)5 print(s1)6 #输出&#xff1a;[]7 # [ac]"$&quo…

.NET Core + Spring Cloud:服务注册与发现

毫无疑问&#xff0c;微服务架构是目前的主流&#xff0c;在微服务架构下&#xff0c;服务治理、负载均衡、服务熔断、配置中心、API网关 等都是需要关注的问题&#xff0c;当然不是非要全部完善后才能进行微服务开发&#xff0c;在很多项目团队中&#xff0c;初期可能会将某个…

python语言中不用来定义函数的关键字_Python 语言中用来定义函数的关键字是

Python 语言中用来定义函数的关键字是答&#xff1a;def调查问卷采集是数据采集人员通过设计具有针对性的问卷,采用方式进行信息采集答&#xff1a;以上都是中国大学MOOC: 突出重点&#xff0c;必须以解决问题为目标。也就是说&#xff0c;重点内容的训练&#xff0c;必须实现预…