中缀表达式的计算(只包含四则运算与括号)

2024-03-27 17:32

本文主要是介绍中缀表达式的计算(只包含四则运算与括号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在上周的ACM入门课上,老师为了计算中缀表达式而引入了后缀表达式的概念,并布置作业:输入一个中缀表达式,输出其后缀表达式。

        如输入:5+2*(3+4)*5-3      输出:5 2 3 4 + * 5 * + 3 -

        我在解决了这个问题后,忽然就想到不如就顺便解决最终问题。

        分析:输入的是中缀表达式,要输出其运算结果,需要考虑到各种运算优先级问题,所以应先应用上面的结果,把中缀表达式转化为后缀表达式,再计算后缀表达式。

        步骤:1.转化:我首先想的是没有括号的情况,因为括号不是运算符,只是改变运算优先级的。鉴于这里要把得到的后缀表达式保存下来,所以用一个数组stored保存,遇到数字就直接保存。关键是遇到运算符的情况。因为非常有可能后面的比前面的更优先运算,满足后进先出特点,用栈stack保存运算符。若当前运算符和栈顶运算符优先级相同,则可以看做栈顶的运算符先做;若当前的运算符比栈顶的运算符优先级低,则栈内的运算应全部做完,再轮到当前的运算符;其他情况则不操作。上述三种情况处理后都要将当前运算符压入栈。

                                    很明显,运算符只有两种优先级,那么不难得到栈内元素最多就是两个。因为若优先级相同,则输出前一个,压入当前,即不改变栈的元素个数,而优先级较大,则直接压入栈,但不可能连续出现较大的情况,所以最多只可能多一个即两个。而较小就清空了。

                                    这样

这篇关于中缀表达式的计算(只包含四则运算与括号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/852890

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成