QT之计算器核心解析算法

上节我们说到计算机默认的是后缀表达式,那么中缀表达式转后缀表达式的过程就类似于编译过程。

必须得注意这么几个问题:四则运算表达式中的括号必须匹配;根据运算符优先级进行转换;转换后的表达式中没有括号;转换后可以顺序计算出最终结果。
下来我们就讲下具体的转换过程:
1、当前元素 e 为数字:输出
2、当前元素 e 为运算符时:1. 与栈顶运算符进行优先级比较;2.小于等于时将栈顶元素输出,转1;3.大于时将当前元素 e 入栈
3、当前元素 e 为左括号:入栈
4、当前元素 e 为右括号:1.弹出栈顶元素并输出,直至栈顶元素为左括号;2.将栈顶的左括号从栈中弹出
用伪代码描述出来就是这样:

其中的关键点是转换过程中左右括号是重要的标志,那么如何确保表达式中的括号能够左右匹配?
那么在合法的四则运算表达式中:括号必然是成对出现的,左括号必然先于右括号出现,可以用伪代码进行描述:

经过这样,我们就可以确保计算机正确的将中缀表达式转换成后缀表达式,也就是将表达式转换为计算机理解的行为。
那么这是计算机所转换的三个示例:

下来我们构建运行下程序看看输出是否正确执行,我们在构造函数这样输入:

输出结果如下:

那么今天的学习就到这了,现在程序已经能按照计算机的思维进行四则运算的读取了,后面我们继续学习相关知识。

        以上内容来自狄泰软件学院的QT教程,欢迎大家一起来学习,可以加我QQ:243343083,一起学习。狄泰技术交流群:199546072

原文地址:http://blog.51cto.com/12810168/2089623

时间: 2024-08-10 16:13:36

QT之计算器核心解析算法的相关文章

第14课 计算器核心解析算法(下)

1. 中缀到后缀的手工转换 (1)按优先级给表达式加括号 (2)从内向外将运算符移动对应的括号后面 (3)去括号,即可得到后缀表达式(如下图,图中数字表示转换顺序) 2. 后缀表达式求值 2.1 图解后缀表达式求值过程 (1)从左向右扫描后缀表达式. (2)遇到数字直接进栈 (3)重点在于遇到运算符时,要找到其左右操作数.(此图中有5个运算符,分别是*./.-.*.+) 2.2 求值步骤(利用栈来进行运算,注意栈只用来保存操作数,并不保存操作符) (1)当前元素为数字:进栈 (2)当前元素为运算

第十三课、计算器核心解析算法(中)

一.中缀转后缀 1.中缀表达式转后缀表达式的过程类似编译过程 (1).四则运算表达式中的括号必须匹配 (2).根据运算符优先级进行转换 (3).转换后的表达式中没有括号 (4).转换后可以顺序计算出最后结果 2.转换过程 (1).当元素e为数字:输出 (2).当元素e为运算符: A.与栈顶运算符进行优先级比较 B.小于等于:将栈顶元素输出,转A执行 C.大于:将当前元素e入栈 (3).当前元素为e为左括号:入栈 (4).当前元素e为右括号: A.弹出栈顶元素并输出,直至栈顶元素为左括号 B.将栈

计算器核心解析算法(上)

计算机如何读懂四则运算表达式?9.3 + (3 - -0.11) * 5 后缀表达式人类习惯的数学表达式叫做中缀表达式另外,还有一种将运算符放在数字后面的后缀表达式5 + 3——> 5 3 +1 + 2 * 3 ——> 1 2 3 * +9 + (3 - 1) *5 ——> 9 3 1 - 5* + 中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式——消除了中缀表达式中的括号——同时保留中缀表达式中的运算优先级 解决方案1.将中缀表达式进行数字和运算符的分离2.将中缀表达

QT之计算器对四则运算表达式的解析

前面我们已经关于计算器介绍的已经够多了,那么它现在还是没有具备计算的功能. 今天我们来继续讲解计算器的解析算法,那么对于一个四则运算表达式, 它是如何读懂的呢?比如:"+9.11 + ( -3 - 1 ) * -5 ": 人类习惯的数学表达式叫做中缀表达式,还有一种将运算符放在数字后面的后缀表达式, 比如:5 + 3 ==> 5 3 +: 1 + 2 * 3 ==> 1 2 3 * +;像这种就是后缀表达式. 那么中缀表达式是符合人类的阅读和思维习惯,后缀表达式则符合计算机

Qt on Android 核心编程

Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 444页 16开 编辑推荐 当Qt跨界牵手Android,移动开发会有什么不同?初学者如何借助Qt开发Android应用?跟随CSDN博文大赛冠军foruok进入Qt on Android无秘之旅! 内容提要 <Qt on Android 核心编程>以"从零开始也能学会Qton Andro

《Qt on Android核心编程》目录

有朋友想看看<Qt on Android核心编程>的目录,So-- 目录 <Qt on Android核心编程>目录,截了10张图才弄好,都在下面了. 内容说明 本书内容基于第一个正式支持 Qt on Android 的 Qt SDK 版本,5.2.0 ,写作过程中 Qt 5.3.0 发布,我调整了部分内容,对有变化的部分作了对应介绍. 从目录可以看出,<Qt on Android核心编程>是从 Qt 的核心概念--元对象系统--讲起的,涵盖了信号与槽.事件.多线程.网

《Qt on Android核心编程》勘误

我的第一本技术书籍<Qt on Android核心编程>已经出版上市,书中难免疏漏,存在一些文字和技术上的问题,特记录在此. 本文会不停更新,拿到书的朋友发现问题可以回复本文,我回将问题更新到博文中.提前感谢各位啦. <Qt on Android核心编程>的试读样章在这里,点击下载.购买链接在下面: china-pub 亚马逊 京东1 京东2 淘宝惊喜价 编排说明 本文将结合章节和问题发现的先后顺序来编排,具体是酱紫的:每个章节单列出来作为本文的一节,在该节下按时间顺序列出发现的问

《Qt on Android核心编程》介绍

<Qt on Android核心编程>终于尘埃落定,付梓印刷了. 封面 看看封面的效果吧,历经几版,最终就成了这个样子. 看下封皮: 这是立体版效果: 章节内容简介 第 1 章 欢迎来到Qt的世界,让我们看看Qt是什么,能给我们带来什么,又有谁在使用Qt.我们要约会的Qt on Android,它缘起何处,有着怎样曲折婉转的历史,如今的小模样能否让我们爱之如狂-- 第 2 章 当你遇见了合适的人,开始筹划第一次约会,又是兴奋又是惆怅,要不要买花,去哪里买礼物,穿什么衣服,洒什么香水,带什么应对

《Qt on Android核心编程》预售链接出来了

本人的新书<Qt on Android核心编程>已经由电子工业出版社博文视点出版,目前china-pub正在预售,欢迎关注. 想了解目录的,看这里:<Qt on Android核心编程>目录. 骚情简介在这里:<Qt on Android核心编程>介绍.