程序设计第三次作业

程序设计第三次作业

github链接

https://github.com/hsh1234/object-oriented

题目:

在这个项目里添加一个Scan类,用来处理输入的字符串。 在这个类里写一个函数(方法)ToStringQueue(string input) 这个函数接收一个四则运算表达式(即input),逐个字符扫描这个表达式,将数字和符号提取出来,得到一组string在这个项目里添加一个Print类,用来输出所得到的队列。在这个类里写一个方法,接收一个队列,并逐个输出,每输出一个换一行。在这个项目里新建一个cpp文件,在其main里面获取键盘输入 以及 创建Scan对象和Print对象。调用Scan对象ToStringQueue(string input),将输入传进去以获取队列。接着将这个队列传入Print对象的方法中,得到输出。

要求:

  • 当输入的数字超过10位(包括小数位)时,报错。
  • 能够处理不超过10位的任意实数
  • 代码要有注释,变量名要有意义
  • 遵循编码规范(编码规范参考),可读性尽可能好

思路:

我的想法是输入一串字符串,在重新设个字符串变量,然后在逐个判断如果是数字就继续读取,直到读取到加减乘除,括号这几个符号,然后将每次新得的字符串push进队列里面。

第一次写好代码发生如下错误PAT提交记录

发现数字没有打印出来,并且符号后面的熟悉也没有打印。 检查后发现多写了个str.clear()导致传入队列中的字符串其实是空的,什么也没有

修改代码后,再次调试还是有错误,发现在最后一个符号后面的数字无法打印。原因就在于我写的代码是当遇到符号后才会进行传入队列,在最后一个符号之前的数字能够传进队列,但由于最后一个数字后面没有符号,也就导致没有传进队列。我的解决方法是传入队列前先判断一下数字的后一位是否为字符,是的话就进行传入队列的操作,同时如果数字的最后一位是输入字符串的最后一位,同样传入队列。这样就避免了最后一个符号后的数字无法传入。

由于之前的调试,代码还没分成不同的文件来放,当我建立了.h好.cpp文件后又发生了错误。 PAT提交记录

经过上网查询,都说是没有加上stdlib.h。然而当我加入之后,还是没有得到解决

然后我发现我定义的Que并不是全局变量(个人看法,不知道是不是这个原因),当我修改之后便可以运行了。

代码如下

Scan.h PAT提交记录

Scan.cpp PAT提交记录

Paint.h PAT提交记录

Paint.cpp PAT提交记录

calculate.cpp PAT提交记录

之前学过C++,所以第一次看到这道题目的时候感觉好难,几天的学习下来,对C++有了一定的了解,但是一直困惑我的是关于队列的内容,做这道题目之前查阅了好多关于队列的内容。做这道题的过程还是比较艰难的,遇到困难就翻看下前面的视频,经常会漏掉一些东西。但是最后还是做完了,还是蛮高兴的。 PAT提交记录

原文地址:https://www.cnblogs.com/hshdsb/p/5215080.html