使用Qt实现计算器功能

之前培训要求我们使用Qt实现计算器的功能,我利用单链表实现了计算器的功能,下面将源码分享给大家。

我们先将其实现方法以及基本功能给大家列出

源码链接:https://download.csdn.net/download/Groot_Lee/11991924或者公众号(扫码最下面二维码)内回复qita0001获取

一、实现方法

因为我是利用链表来实现的功能,所以我接下来要使用链表的知识来讲解这一部分。但是本教程不再介绍链表的基本知识。

1、将每个数据存入链表

这部分很简单,就是我每次键入的值在遇到运算符号之前(+、-、*、/、()),都会存入我的一个全局变量中,当遇到运算符时,创建两个链表的内存,将我之前键入的数字以及运算符分别存入两个内存之中。当等号出现时,开始读链表中内容,这就涉及到减减乘除的运算以及其优先级的判别。

2、加减乘除以及括号的运算以及优先级的判别

关于优先级。我们首先检测优先级别高的运算符,在这个例子中,我们就是首先检测有没有括号,有括号首先对括号内的内容进行运算,没有括号继续往下走,检测乘和除,有则运算,没有继续往下走计算加和减。

关于运算符的运算。

(1)我们来介绍加减乘除的运算,由于加减乘除的原理是一样的,所以我们选择一样介绍就好了。

 

图中就是我键入的2+3的内容,当我输入等号之后,程序找到了+号这个节点,他的上一个节点和下一个节点必然是我们需要运算的数字,所以我们找+号的上一个节点和下一个节点也就是2和3。因为我们判断到是加号,所以调用“加”这个函数,将3和2加起来,得到的新值为5

                                           

将5赋值给2所在的节点位置,注意此时3和加的节点是没有变的。那么接下来我们的操作就是将+和3删除掉,并将5所在的节点的下一个地址指向3的下一个地址,我们这个例子中只有两位数的运算,所以下一个地址应当是指向等号所在的节点。

  

此时程序判断到等号的下一个节点是NULL,所以本次的运算结束,输出到屏幕上为5。

(2)接下来介绍括号内是怎样运算的。括号内优先级别判断方法跟括号外是一样的,所以不再介绍了。

                               

此图中就是一个带括号的计算式子3*(5+3)。我们检测到有括号,所以首先运算括号中的内容。我们首先检测到的是右括号,此时我们把右括号设置为一种我们自己定义的头节点,然后检测左括号,检测到左括号把左括号设置成为我们认为的尾节点。然后进行我们自己定义的括号头节点到尾节点的循环。当我们找到加号之后,他的上一个和下一个节点必然是我们所要运算的数据,我们将运算好的5+3=8替换掉5所在节点的内容。

此时运算式子就变成了这样,然后我们将8所在的节点下一个地址指向右括号,将+和3内存删除。

 

此时式子很简化,变成了这样。接下来将左右括号去掉,此时的操作应当是,将*号的下一个地址指向8所在的地址,8所在节点的下一个地址指向右括号的下一个地址,将左右括号所在的节点删除。

 

式子就简化成了这个样子,此时的运算和上面的3+5所进行的是一样的操作,就不再赘述。

二、基本功能以及注意事项            

功能
1、加减乘除
2、小括号运算,并且小括号优先级最高
3、一键清零
4、小数点运算

快捷键
1、0-9和小数点分别对应键盘上0-9和小数点
2、回删 : backspace
3、清零 : delete
4、左右括号对应键盘上左右括号
5、等于 : 数字键盘enter
6、加减乘除对应数字键盘加减乘除

规则
1、不允许嵌套小括号,只允许一层,但允许有多个
    例如 : 1+(2*(3+2))不允许;1+3*(2+3)+4*(2+2)允许。
2、乘法必须加括号,不允许省略
3、首先输入符号则在首端补0
4、如果以符号结尾则默认符号与等于之间为0

错误提示
1、符号书写错误1 : 连续出现两个或者以上运算符
2、括号错误1 : 左右括号总数是奇数
2、括号错误2 : 左右括号写反
3、括号错误3 : 连续出现两个左括号
4、括号错误4 : 出现类似n(x+x)
5、括号错误5 : 出现类似(x+x)n

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值