用栈实现简易计算器|Zam9036博客

本文介绍了使用C++实现一个栈式计算器的过程,包括实验目的、程序设计、算法分析和测试用例。计算器能处理正负数、小数的加减乘除运算和括号,通过栈来判断输入表达式的合法性。同时,解决了字符串中乱入字母和错误识别的问题。
摘要由CSDN通过智能技术生成

编程语言

​ C++

问题描述

实验目的

​ 熟悉C++的语法,掌握栈的运算及应用,了解对算法的健壮性要求。

实验内容

  • 实现计算器类中lp、rp和operate函数
  • 完善计算器类evaluate函数,增加对输入的合法性检查,包括滤掉所有非法输入及处理左右括号不配对的输入
  • 编制应用程序测试这个计算器

程序设计

程序要求

​ 利用栈原理,设计一个可以计算所输入表达式的程序,要求可以计算正数,负数,小数的加减乘除运算和括号运算,以#结束输入。

程序功能

​ 对输入的式子进行判断式子格式是否正确。若正确,进行运算并输出最终结果;若错误,提示报错。

算法分析

​ 用栈实现计算器,主要思路就是设置一个符号栈和一个数字栈用于存储数字和字符。输入字符串时在字符串尾部加一个“#”以示输入结束。然后扫描字符串,如果扫描结果是数字就进入数字栈。如果是运算符号要判断符号优先级,若栈外符号优先级大于栈内符号优先级则进栈;若小于栈内优先级,则符号栈出栈一位,数字栈出栈两位进行计算,结果重新进入数字栈,直到栈外优先级大于栈内。

测试用例

用如下表达式进行测试:

(56-23)/8-4# 期望结果:0.125

34+p(u89-12.3)k/3# 期望结果:59.5667

89.5*749+25)# 期望结果:输入有误

(8*(7-4)# 期望结果:输入有误

65*(72+98)(70-45) # 期望结果:输入有误

6*# 期望结果:输入有误

)5+3(# 期望结果:输入有误

程序测试

示例测试

示例测试1

示例测试2

示例测试3

示例测试4

示例测试5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值