基于MFC的简单计算器的实现
对于实验项目的实现,采用MFC做计算器的图形界面,然后将求解表达式的方法封装成类,放到MFC中进行调用最终呈现出最后的效果展示。
求解算数表达式解题思路
对于算数表达式的求解,最快也是最准确的求解方式就是借助计算器。当然我们也很容易联想到,计算机的内部是怎么实现的,使用了什么数据结构,采用了什么比较新颖的算法。这些问题都是很容易联想到的。接下来我们就对拿到一个算数表达式该怎么解决进行分析。
1.首先,判断该算数表达式是不是合法的。比如出现运算符是连续出现的、表达式是以小数点开头、小数点和运算符一起相继出现等等这些都是不合法的。
2. 其次,对于求解表达式采用什么数据结构,很容易能想得到的就是借助于堆栈和队列进行,也可以借助于二叉树进行
3. 还有就是如何处理运算符优先级的问题
4. 最后就是是否存在数据类型的转换,如整型转换为string或者double类型等等。
求值表达式代码的实现
1.表达式合法性的判断
- 思路
为了将在编写程序的过程中更加的简洁迅速,故将字符型单词符 转换成int型数据,其对应的转化关系如下表所示。
单词符 对应数字 + 1 – 2 * 3 / 4 数字 5 ( 6 ) 7 我们用这样的表示方式进行转换,故此我们需要新的数据结构即的方式vector
>此结构类似于int,只不过这个数据类型里面包含两个数据,即string和int两种数据类型。用这种数据类型将单词符 依次转换为对应的数字序 ,存储到其中。在依次转换的过程中来判断表达式是否是合法的。参考博客. - 代码
运行结果展示:

2.表达存储过程及计算过程
- 思路
对于合法表达式,我们采用将中缀表达式转换成后缀表达式,此过程接触堆栈和队列进行,然后将后缀表达式通过堆栈进行求值。 - 实现代码
1)中缀转后缀
#include #include #include using namespace std;// 获取运算符的优先级int is_prior(char c){ switch (c) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; }}// 判断是否是运算符bool is_Operator(char c){ switch (c) { case '+': case '-': case '*': case '/': return true; default: return false声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!