说到表达式求值问题,相信很多人都是迷茫或者不知道该如何下手去解决问题。首先要知道什么是表达式求值?可以解决什么问题?

通过看了表达式求值的一系列题目得知,要解决的问题一般是输入一个字符串表示的表达式,要求输出它的值。当然也有变种比如表达式中是否包含括号,指数运算,含多少变量,判断多个表达式是否等价,等等。

表达式一般需要先进行语法分析再求值,也可以边分析边求值,语法分析的作用是检查输入的字符串是否是一个合法的表达式,一般使用语法分析器解决。

表达式包含两类字符:运算数和运算符。对于长度为n的表达式,借助合适的分析方法,可以在O(n)的时间复杂度内完成分析与求值。

说到表达式求值的问题,表达式求值的顺序一部分是由操作符的优先级和结合性决定。

同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

(1)常用表达式求值分析

①方法

常见的方法有两种,一种是中缀表达式求值,一种是后缀表达式求值

②优缺点

中缀表达式:符合人的习惯,但是在计算机中计算时要考虑其优先级和括号的关系,实现起来比较麻烦

后缀表达式:在计算机中实现时不需要考虑优先级和括号,因为后缀表达式已经将其解决了,但是不符合人的习惯


(2)相互转换分析

①关于前缀的转换是从右向左扫描的

②关于后缀的转换是从左向右转换的


3.总结

不管是怎么样转换和怎么样计算,思路理解起来都没那么难,难就难在代码的实现上,这个还是需要大家做大量的题,去通过实践来理解。

当你代码有了、思路有了,用代码敲出自己的思路,记住:代码的实践很重要!


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)