第四次作业 传送门

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. SpringCloud - RestTemplate 的三种使用方式

    1. 直接使用 RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(&q ...

  2. Hudson-ci/Installing Hudson Windows Service---官方文档

    < Hudson-ci Hudson Continuous Integration Server Website Download Community Mailing List • Forums ...

  3. C#可选参数、命名参数、参数数组

    学习了C#4.0的新特性:可选参数.命名参数.参数数组. 1.可选参数,是指给方法的特定参数指定默认值,在调用方法时可以省略掉这些参数. 但要注意: (1)可选参数不能为参数列表的第1个参数,必须位于 ...

  4. C# System.Timers.Timers的用法在工控设备上位中的用法

    这两天写设备的上位,由于要读取服务器上的数据库,通过WEBSERVICE访问数据库,我具体的做法是: 1.专门用Timer起线程执行,由于在用的时候报错,不能访问其他线程资源的错误,因此我用了委托的方 ...

  5. 解决-word里无论怎么改变字体颜色,字体总是红色的

    1.你遇到的问题是Word当前处于审阅状态,修改的内容显示为红色字体.2.解决办法是退出Word审阅状态,或者接受全部修订.3.不同Word版本的审阅模式不同,可在菜单栏里退出审阅,或者按鼠标右键弹出 ...

  6. Spring Boot学习笔记(一)与JSP整合

    项目结构展示 在webapp目录下面手动创建JSP的目录和web.xml 创建web.xml只是为了不报错,在SpringBoot的项目中实际上用不到web.xml 打开pom.xml把框住的地方改成 ...

  7. scrum 项目的基本模式

    scrum 项目中有 3 个主要的角色:产品所有者, Scrum 主管和团队成员 产品所有者和团队其他成员一起工作,负责维护生产积压工作表 (production backlog) ,并对表中的项制定 ...

  8. MongoDB客户端及监控工具

    现在许多应用都使用MongoDB存储大量的业务数据,MongoDB基于文档式的存储,在大数据行业的应用还是很普遍的.MongoDB的客户端工具也很多,基于web的却不多,国产的就更少了,下面这款国产的 ...

  9. spss C# 二次开发 学习笔记(六)——Spss统计结果的输出

    Spss的二次开发可以很简单,实例化一个对象,然后启用服务,接着提交命令,最后停止服务. 其中重点为提交命令,针对各种统计功能需求,以及被统计分析的数据内容等,命令的内容可以很复杂,但也可以简单的为一 ...

  10. sql: Oracle simple example table

    --Oracle 9i 实例数据脚本地址:$oracle_home/rdbms/admin/utlsampl.sql CREATE TABLE DEPT (DEPTNO NUMBER(2) CONST ...