c++的路上,我坚信,我可以 -----第四次作业体会
第四次作业 传送门
1、浅谈"新对象"sstream和stack
第四次作业,就是在第三次作业上作修改,上周周末,我刚刚才完成了第三次作业,但是知道了队列如何应用,面对这次的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.h和calculator.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++的路上,我坚信,我可以 -----第四次作业体会的更多相关文章
- 攻城狮在路上(贰) Spring(四)--- Spring BeanFactory简介
BeanFactory时Spring框架最核心的接口,它提供了高级IoC的配置机制,使管理不同类型的Java对象成为了可能.我们一般称BeanFactory为IoC容器.BeanFactory是Spr ...
- 攻城狮在路上(壹) Hibernate(四)--- 对象标识符(OID)生成机制
Hibernate使用对象标识符(OID)来建立内存中对象和数据库表中记录的对应关系,对象的OID和数据库的主键对应.为了保证OID的唯一性和不可变性,应该让Hibernate来为OID赋值.Hibe ...
- wifi热点共享 3G网络
本文描述一些iptables的基础知识和使用方法.最后记录一个wifi共享3G上网,以及禁止wifi内某个IP通过3G联网的例子. 一. 在Linux系统中,防火墙,网址转换(NAT),数据包记录以及 ...
- 直播开始:'云榨汁机'诞生记--聊聊JavaScript中的'业务建模'
闭包是JavaScript中的一个重要特性,在之前的博文中,我们说闭包是一个'看似简单,其实很有内涵'的特性.当我们用JavaScript来实现相对复杂的业务建模时,我们可以如何利用'闭包'这个特性呢 ...
- 2019北航oo课程第二单元作业总结..#_#..
学习了之前在写代码是从来没有见过的多线程之后,便迎来了此次电梯作业.说实话,这次作业做得十分的辛苦,虽然在前三次作业中领悟到了java面向对象的精髓,但是再加上了多线程之后,又开始理不清思路,对自己的 ...
- QQ的成功,远没有你想象的那么顺利和轻松
本文来自公众号“傅老师”(ID:fustory)的原创分享,感谢作者. 1.引言 如果QQ是一个人,看似风光,其实从出生到成长,过程饱经错荡,堪算坎坷.它的人生历程确实也够励志的了. 学习交流: ...
- BIO、NIO和AIO的区别(简明版)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6543960.html 一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离 ...
- BIO、NIO和AIO的区别
一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离器.根据处理机制的不同,事件分离器又分为:同步的Reactor和异步的Proactor. Reactor模型: ...
- 迎来OO的曙光,总结规格的意义——OO第四次博客总结
一切都要结束了,砥砺前行~ 一.测试与正确性论证的效果差异 测试,顾名思义就是我们暴力用大量数据轰炸编写的程序的过程.日常的OO过程中,我们经常互相寻求“测试集”,正是因为测试使用特定数据对我们的功能 ...
随机推荐
- js if和switch,==和===
今天改插件BoxScroll的时候,因为if里面的条件判断多于两个,于是立马想着改写switch.改到一半,忽然记起来JSHint等代码质量检测工具中的一个要求,用===替换==,不用不可靠的强制转型 ...
- Android studio--几个生成文件的区别:Make Project、Make Module、Build apk、Signed apk
参考资料: https://stackoverflow.com/questions/35334319/difference-between-make-project-make-module-app-b ...
- Codeforces F. Cowmpany Cowmpensation
Description 有一棵树,现在要给每个节点赋一个在1到D之间的权值,问有多少种方案满足任意一个节点的权值都不大于其父亲的权值. n<=3000,D<=1e9 题面 Solution ...
- Java SPI
一.什么是Java SPI? SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoade ...
- AngularJs ng-repeat重复项异常解决方案
ng-repeat="v in arr track by $index" <!DOCTYPE html> <html lang="en"> ...
- [javaSE] GUI(打开文件对话框)
使用FileDialog可以打开文件对话框,根据模式不同,可以分为打开文件和保存文件对话框 获取FileDialog对象,new出来,参数:所属Frame对象,String的标题,FileDialog ...
- 多线程-lock锁
package 多线程.lock锁; import java.util.concurrent.locks.ReentrantLock; /*. * * //同步代码块 * * */ public cl ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- 普通平衡树Tyvj1728、luogu P3369 (treap)
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输出最小的排名) 查询排名为x的 ...
- Linux(Ubuntu)下MySQL的安装
1)首先检查系统中是否已经安装了MySQL 在终端里面输入 sudo netstat -tap | grep mysql 若没有反映,没有显示已安装结果,则没有安装.若如下显示,则表示已经安装 2)如 ...