第四次作业 传送门

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. MVC5 知识点记录

    http://blog.csdn.net/qinkeliangqin/article/details/27084639#t27 一.概述 MVC简介: •       模型(Model) “数据模型” ...

  2. $emit子组件传出多个参数,如何在父组件中在接收所有参数的同时添加自定义参数

    很多时候用$emit携带参数传出事件,并且又需要在父组件中使用自定义参数时,这时我们就无法接受到子组件传出的参数了.    找到了两种方法可以同时添加自定义参数的方法. 方法一:子组件传出单个参数时 ...

  3. JavaScript中有对字符串编码的三个函数:escape,encodeURI,encodeURIComponent

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  4. 陆续放给大家一些拿钱买的收费的模板,今天先给一个在某销售网站上排行第一的管理端模板 Ace Responsive Admin Template

    下载地址: http://pan.baidu.com/s/1B2xjC 提取密码:le1p 原文地址:http://zhangrou.net/post/2014/06/23/陆续放给大家一些拿钱买的收 ...

  5. ASP.NET 表单验证方法与客户端(浏览器)服务器交互机制的故事

    想到这个问题完全是一个意外吧,是在寻找另外一个问题答案的过程中,才对验证方法与浏览器服务器交互机制的关系有了清晰的认识. 先说下验证方法,验证方法分为前台验证和后台验证. 前台验证就是类似jQuery ...

  6. 集群搭建之Hive配置要点

    注意点: 在启动Hive 的时候要先启动Hadoop和MySQL服务. Mysql 和 Hive 搭建在 yan00机器上. part1:MySQL配置相关 安装和配置相关命令: Yum instal ...

  7. hdu 1392 Surround the Trees 凸包模板

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. BZOJ4162:shlw loves matrix II

    传送门 利用Cayley-Hamilton定理,用插值法求出特征多项式 \(P(x)\) 然后 \(M^n\equiv M^n(mod~P(x))(mod~P(x))\) 然后就多项式快速幂+取模 最 ...

  9. js 对象数组去重

    var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4h ...

  10. System.out.println与System.err.println的区别

    public class Test2 { static { System.out.println("1"); } { System.out.println("2" ...