MFC计算器制作----代码实现

本文介绍了如何使用MFC制作计算器,通过中缀表达式转后缀表达式实现括号和运算符的计算。文章详细阐述了中缀转后缀的过程,涉及运算符优先级比较和栈的数据结构,以及最终的后缀式计算方法。
摘要由CSDN通过智能技术生成

MFC计算器制作----代码实现

还没有进行界面设计的朋友可以先看这里:
MFC计算器制作----界面设计

现在界面设计已经接近完成,那么我们将开始实现计算器的所有功能。

1.基础思想

由于计算器包含括号的功能,所以在实现功能上使用了栈的思想。在栈的使用上,建立了两个栈来分别用来储存数字(opnd)和符号(optr)。在计算方法的使用上,采用了中缀式(infix)转为后缀式(postfix)再计算的方法,该方法可以在运算的时候将括号去掉,而且不用再考虑优先级问题;即将运算符放在两个运算对象的后面,按照运算符出现的顺序,从左往右进行计算。这种方法比起中缀式直接计算,多了转换的步骤,但是在总体功能的实现上,后缀式的方法更为简便。
c++的栈库使用可以参考该文章:C++基础:C++标准库之栈(stack)和队列(queue)

2.中缀式转后缀式

用户输入的每一个数字和符号都会储存在一个名为infix的字符数组中,直到用户按下等号为止,该字符数组的所有元素的总和即为我们平时写的计算式,也成为中缀式(1+1=2就是中缀表达式)。

infix[a++]='1' //在用户按下按钮时就会在数组里面增加相应的符号

在用户按下等号键后,程序就会调用中缀转后缀(infix_to_postfix)函数。在转换过程中,如果infix中的元素是数字,这直接转移到postfix数组中;如果infix中的元素是运算符,则进行优先级的比较,从而决定将符号放进符号栈中还是直接放入postfix数组中。
在转换过程中,每一部分会用一个空号隔开,即数字与数字之间,符号与数字之间用空号隔开,从而使程序能分辨出每一个部分。整个过程为一个循环,直到infix的元素为‘\0’。

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值