利用栈实现计算器(calculator)一:基本思路及实现

本文介绍了如何利用栈实现中缀表达式到后缀表达式的转换,以及如何计算后缀表达式的值。文章通过C++详细讲解了包括中缀表达式改写、后缀表达式计算以及算术优先级判断的过程,适用于实现科学计算器功能。
摘要由CSDN通过智能技术生成

github:https://github.com/AnkangH/CSDN/blob/master/%E5%88%A9%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E8%AE%A1%E7%AE%97%E5%99%A8/01.%E5%9F%BA%E6%9C%AC%E6%80%9D%E8%B7%AF%E5%8F%8A%E5%88%9D%E6%AD%A5%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0

1.要求

输入一个数学算术表达式,计算它的值并输出,实现科学计算器。输入为0-9数字,+ -*,以及()括号。
暂时完成了数字0-9的运算,对于大于两位的十进制数,需要将原先的char变为string,并且对字符串进行划分,来确定每个数字大小。如对于“1+2”和“11+22”,基本的运算程序相同,只是需要根据运算符和可能的括号来确定参加计算的数值是多少。

2.设计思路

2.1 改写后缀表达式

对于一个数学算术表达式,如6*(5+(2+3)*8+3),需要根据算术计算符的优先级进行划分,先计算优先级高的,其结果再参与下个计算。上述表达式为中缀记法,而后缀记法为6523+8*+3+*。可以看出后缀记法不含有括号,且计算顺序为从左到右,不需要判断优先级。
基本思路是利用栈将中缀算术表达式改写为后缀算术表达式。然后利用栈求解后缀算术表达式的结果

对于带有括号的中缀表达式,可以利用栈实现中缀表达式到后缀表达式的改写。基本思路是遍历输入字符串,对于每个字符进行判断。
如果是数字,则放到输出表达式中。
如果是运算符‘ + ’ ‘ - ’ ‘ * ’ ‘ ( ’那么根据栈顶元素判断。如当前运算符优先级>栈顶元素,当前运算符入栈。否则栈顶元素出栈,放入输出表达式,直到当前运算符优先级小于栈顶元素或栈空。
如果是运算符‘)’那么将栈顶元素放到输出表达式时,直到栈顶元素为‘&#

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值