第四次作业 传送门

1、浅谈"新对象"sstreamstack

  • 第四次作业,就是在第三次作业上作修改,上周周末,我刚刚才完成了第三次作业,但是知道了队列如何应用,面对这次的stack,这个与queue互补的对象,操作上只有.front()对queue的首元素操作和.top()对栈首元素的操作的区别。在第三次作业时,我还不能彻底的理解二者的区别,比如能否互相转换,互相赋值等等。这次我明白了如果定义string a将其压入栈或者放入是的队列中,其本质就像是一个string的数组。我们可以使用诸如.top()[0]这样的方式去访问栈顶的元素中的数值。

  • sstream的话则是一个更新的领域,他其实要先定义,如stringstream a将a<<string str;将一个字符串传入a中再将a>>double/int b;传入整型或者浮点型的b中,而自己需要使用函数a.clear()清除,在完成之后的字符转化数字的操作,这就与原来c语言对于一个char c利用'0'-c计算ascll码的方式类似。而这次是彻底的把他转化了下来。


2、本次作业思路梳理

1>在main.cpp方面

  • 首先要进行对输入是否有-a进行判断,之后,因为有括号的存在还要利用栈写函数来判断是否括号匹配。

2>新增的计算部分calculator.hcalculator.cpp

  • 这个是本次作业的难点,其原因之一在于括号和算法的优先度,以及负号还是减号的判断。第三次作业我们并没有对二者进行判断。因此需要在这次作业中进行判断。

(1)对于括号和算法的优先度计算问题 参考资料1 参考资料2

  • 我查找了一些资料,认识到了我们所输入的算式为中缀算式,而电脑执行的一般都是前缀和后缀算式,在这些式子里,并没有括号的干扰,因此,我开始利用stack和queue完成对输入式子的前缀式转换,此步骤在于去掉括号。之后利用前缀算式的计算方法,只需要计算+ - * /即可

(2)对于负号还是减号的判定

  • 这个问题是在我已经编译运行完后,发现对于-1+1的结果无法计算,会直接提示栈或者是队列空,只能中断,对此我想的方法是,一个四则运算算式中,只有-在头或者是-(-中括号后的-的形式,我只需要在入栈或者队列式补充一个字符'0',这样就等于把负号更改为减号。

补充部分

  • 题目要求我们要在cmd里使用calculator.exe并在一行里输入,这里需要int main(int argc,char argv[]),于是就需要对他进行讨论,首先argc表示在cmd里的输入,如输入:calculator.exe -a 100-22。其意思是calculator.exe 使得argc==1,argv[0]==calculator.exe,以此类推那么这里的argc等于3,而argv直接可以调用到string input里面。

学长的拓展、完善部分

  • 那么问题来了,如果我们在编译器里进行调试,那么因为只是赋值语句,没有cin,所以会报错。如何解决呢?我们可以在cin的基础上设置一个bool型函数 或者设置0 1变量。通过argc的值是否小于2来判断是否有输入的值,如果没有则调用cin进行输入input,如果有则进行赋值语句。这样就可以在编译和在cmd中同时使用calculator的结果了。

bug的修复

  • 修复了对于括号的补全问题。V1.1版本已上传。

代码格式优化

  • 更改了不易读懂的变量名称。V1.2版本已上传

章末总结

  • 通过这次作业,我可以熟练地使用stack和queue,并且对于类的定义和调用又熟悉了很多。而stringstream的定义教会了我们转换数字。最后cmd的调用.exe,让我们渐渐与dos调用接手,此次作业收货颇丰,累并快乐着。期待下次的学习*

c++的路上,我坚信,我可以 -----第四次作业体会的更多相关文章

  1. 攻城狮在路上(贰) Spring(四)--- Spring BeanFactory简介

    BeanFactory时Spring框架最核心的接口,它提供了高级IoC的配置机制,使管理不同类型的Java对象成为了可能.我们一般称BeanFactory为IoC容器.BeanFactory是Spr ...

  2. 攻城狮在路上(壹) Hibernate(四)--- 对象标识符(OID)生成机制

    Hibernate使用对象标识符(OID)来建立内存中对象和数据库表中记录的对应关系,对象的OID和数据库的主键对应.为了保证OID的唯一性和不可变性,应该让Hibernate来为OID赋值.Hibe ...

  3. wifi热点共享 3G网络

    本文描述一些iptables的基础知识和使用方法.最后记录一个wifi共享3G上网,以及禁止wifi内某个IP通过3G联网的例子. 一. 在Linux系统中,防火墙,网址转换(NAT),数据包记录以及 ...

  4. 直播开始:'云榨汁机'诞生记--聊聊JavaScript中的'业务建模'

    闭包是JavaScript中的一个重要特性,在之前的博文中,我们说闭包是一个'看似简单,其实很有内涵'的特性.当我们用JavaScript来实现相对复杂的业务建模时,我们可以如何利用'闭包'这个特性呢 ...

  5. 2019北航oo课程第二单元作业总结..#_#..

    学习了之前在写代码是从来没有见过的多线程之后,便迎来了此次电梯作业.说实话,这次作业做得十分的辛苦,虽然在前三次作业中领悟到了java面向对象的精髓,但是再加上了多线程之后,又开始理不清思路,对自己的 ...

  6. QQ的成功,远没有你想象的那么顺利和轻松

    本文来自公众号“傅老师”(ID:fustory)的原创分享,感谢作者. 1.引言 如果QQ是一个人,看似风光,其实从出生到成长,过程饱经错荡,堪算坎坷.它的人生历程确实也够励志的了.   学习交流: ...

  7. BIO、NIO和AIO的区别(简明版)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543960.html 一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离 ...

  8. BIO、NIO和AIO的区别

    一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离器.根据处理机制的不同,事件分离器又分为:同步的Reactor和异步的Proactor. Reactor模型: ...

  9. 迎来OO的曙光,总结规格的意义——OO第四次博客总结

    一切都要结束了,砥砺前行~ 一.测试与正确性论证的效果差异 测试,顾名思义就是我们暴力用大量数据轰炸编写的程序的过程.日常的OO过程中,我们经常互相寻求“测试集”,正是因为测试使用特定数据对我们的功能 ...

随机推荐

  1. Diskrete Mathematik

    1.Aussagenlogik 1.1 Gleichwertiges Kalkül 1.2 Normalform Einfache Disjunktion besteht aus Disjunktio ...

  2. 非科班双非本科投的337家Java后台(励志)

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 文章出自h ...

  3. vue仿京东省市区三级联动选择组件

    工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...

  4. Android studio--几个生成文件的区别:Make Project、Make Module、Build apk、Signed apk

    参考资料: https://stackoverflow.com/questions/35334319/difference-between-make-project-make-module-app-b ...

  5. hadoop学习笔记(二):简单启动

    一.hadoop组件依赖关系 二.hadoop日志格式: 两种日志,分别以out和log结尾: 1 以log结尾的日志:通过log4j日志记录格式进行记录的日志,采用日常滚动文件后缀策略来命名日志文件 ...

  6. IoC容器之Unity

    关于IoC.Unity见博友文章点击这里. 话不多说,上程序HelloUnity,程序采用VS2010,Unity2.1. 1.程序框架如下 2.类库HelloUnity.Objects,主要为实体类 ...

  7. docker离线安装 启动报错Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

    安装报错的提示:systemctl status docker.service 好吧,原来是缺少库文件.验证一下想法吧,yum -y install libseccomp 成功后,再启动docker发 ...

  8. Spring入门(三)— AOP注解、jdbc模板、事务

    一.AOP注解开发 导入jar包 aop联盟包. aspectJ实现包 . spring-aop-xxx.jar . spring-aspect-xxx.jar 导入约束 aop约束 托管扩展类和被扩 ...

  9. 粘性页脚 Sticky Footer 最佳方式

    前段时间工作中遇到粘性页脚的需求,以前用过JS控制过,最后发现flex布局是解决这类问题的好帮手. 粘性页脚:即使没有足够的内容填充页面,也要将页脚固定到窗口的底部. <!DOCTYPE htm ...

  10. 工厂方法模式(GOF23)

    耦合关系直接决定着软件面对变化时的行为 主要对模块之间的关系进行整理,依赖关系倒置(依赖反转),变化快的东西不能影响到变化慢的东西 用封装机制来隔离易变的对象,抽象部分(不易变)和细节部分(可能容易变 ...