Git传送门

纸上得来终觉浅,绝知此事要躬行。

学习了一些c++的相应知识后,虽然了解写法,真正操作时还是出现小错误。要多操作,记住关键点,避免不该有的小错误。

写分文件类外定义时出现了问题。在Scan.cpp文件中定义方法时忘记在方法名前加上作用域Scan::导致错误。记住该关键点后写Print.cpp文件就很顺利.

在Print类中写的一个打印队列的for循环出现错误

  1. for (int i = 0; i < inputQue.size(); i++)
  2. {
  3. cout << inputQue.front() << endl;
  4. inputQue.pop();
  5. }

在测试数据时发现输出不完全,队列后面的部分丢失。通过调试输出队列的大小意识到当让队列头部元素出列后队列的size发生变化,用变量记下接收到的队列大小解决问题。

  1. int size = inputQue.size();
  2. for (int i = 0; i < size; i++)
  3. {
  4. cout << inputQue.front() << endl;
  5. inputQue.pop();
  6. }

还有解决方案是利用while循环。

  1. while (inputQue.size())
  2. {
  3. cout << inputQue.front() << endl;
  4. inputQue.pop();
  5. }

代码部分


Scan.h

  1. #include<iostream>
  2. #include<string>
  3. #include<queue>
  4. using namespace std;
  5. class Scan
  6. {
  7. public:
  8. /*接收一个四则运算表达式,将表达式对应拆分存入队列 */
  9. void ToStringQueue(string input);
  10. /*获取表达式处理后的队列 */
  11. queue<string> getQue();
  12. private:
  13. bool isTrue = true; //判断输入是否正确(目前实现判断输入的数字是否超过十位 超过则为 false)
  14. queue<string> inputQue; //存放表达式处理后的队列
  15. };

Scan.cpp

  1. #include"Scan.h"
  2. using namespace std;
  3. void Scan::ToStringQueue(string input)
  4. {
  5. string sign = ""; //存放符号
  6. string num = ""; //存放数字
  7. int count = 0; //记忆数字位数
  8. for (int i = 0; i < input.size(); i++)
  9. {
  10. /*当前位为符号*/
  11. if (input[i] == '-' || input[i] == '(' || input[i] == ')' || input[i] == '+' || input[i] == '*' || input[i] == '/')
  12. {
  13. if (num!="")
  14. {
  15. inputQue.push(num);
  16. num = "";
  17. count = 0;
  18. }
  19. inputQue.push(sign = input[i]);
  20. }
  21. /*当前位为数字*/
  22. else if (input[i] >= 48 && input[i] <= 57 || input[i] == '.')
  23. {
  24. count++;
  25. if (count > 10)
  26. {
  27. cout << "输入的数字超过十位(包括小数位)" << endl;
  28. isTrue = false;
  29. break;
  30. }
  31. num += input[i];
  32. }
  33. }
  34. /*最后一位为数字*/
  35. if(num!="" && isTrue)
  36. {
  37. inputQue.push(num);
  38. }
  39. /*输入不符(目前为输入的数字超过十位),清空队列*/
  40. if (!isTrue)
  41. {
  42. int size = inputQue.size();
  43. for (int j = 0; j < size; j++)
  44. {
  45. inputQue.pop();
  46. }
  47. }
  48. }
  49. queue<string> Scan::getQue()
  50. {
  51. return inputQue;
  52. }

Print.h

  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4. class Print
  5. {
  6. public:
  7. /*打印接收的队列*/
  8. void printQue(queue<string> que);
  9. };

Print.cpp

  1. #include"Print.h">
  2. using namespace std;
  3. void Print::printQue(queue<string> que)
  4. {
  5. int size = que.size(); //存放队列的大小
  6. /*当队列非空时打印队列,队列若为空则输入不符*/
  7. if (!que.empty())
  8. {
  9. for (int i=0; i< size; i++)
  10. {
  11. cout << que.front() << endl;
  12. que.pop();
  13. }
  14. }
  15. }

main.cpp

  1. #include"Scan.h"
  2. #include"Print.h"
  3. using namespace std;
  4. int main()
  5. {
  6. string input; //接收键盘输入的表达式
  7. cin>>input;
  8. Scan sc;
  9. sc.ToStringQueue(input) ;
  10. queue<string> q = sc.getQue(); //存放获取的队列
  11. Print pr;
  12. pr.printQue(q);
  13. return 0;
  14. }

写完代码看了一些同学的博客后发现自己还是有许多不足的地方,应该多加思考,深入思考。比如将数字存放入队列进行判断时我将数字与符号显性地分开存入num和sign字符串中,当时有这种想法是为了后续方便将字符串数字转变为实数,后来想了想queue存放的是同类型的数据,所以在拆分表达式放入队列时显性分开的意义不大,不过可能更好理解吧(...)。还有对于函数的写法可以多思考,有时候代码块位置的改变可能让代码的运行效率快上许多。

《面向对象程序设计》 三 Calculator 计算器初步的更多相关文章

  1. C++面向对象程序设计之C++的初步知识

    本节内容为学习谭浩强老师编写的<C++面向对象程序设计>的第1章  C++的初步知识  后的个人总结. 在正文开始之前,首先声明,我是Python程序员. 1.2.最简单的C++程序 例1 ...

  2. PTA面向对象程序设计6-3 面积计算器(函数重载)

    实现一个面积计算器,它能够计算矩形或长方体的面积. 函数接口定义: int area(int x, int y); int area(int x, int y, int z); 第一个函数计算长方形的 ...

  3. PTA 面向对象程序设计 6-3 面积计算器(函数重载)

    6-3 面积计算器(函数重载) 实现一个面积计算器,它能够计算矩形或长方体的面积. 函数接口定义: int area(int x, int y); int area(int x, int y, int ...

  4. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  5. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 20162321王彪-实验二-Java面向对象程序设计

    实验二Java面向对象程序设计 实验内容一 初步掌握单元测试和TDD 什么是单元测试:单元测试时开发者编写的一小段代码,用于检测被测代码的一个很小的,很明确的功能是否正确.执行单元测试,是为了证明某段 ...

  7. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  8. 实验二 Java面向对象程序设计实验报告

    实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...

  9. 实验二 Java面向对象程序设计 20175301李锦然实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

随机推荐

  1. kubernetes continually evict pod when node's inode exhausted

    kubernetes等容器技术可以将所有的业务进程运行在公共的资源池中,提高资源利用率,节约成本,但是为避免不同进程之间相互干扰,对底层docker, kubernetes的隔离性就有了更高的要求,k ...

  2. Spring Aop之@Before、@After、@Around、@AfterReturning

    在项目中使用到了@Aspect注解,故研究了下与其配套的几个注解,将测试结果记录下来 import org.aspectj.lang.JoinPoint; import org.aspectj.lan ...

  3. easyUI-textbox回车获取不到正确的textbox值问题

    //要先给文本框手动赋值之后才可以获取正确的文本框内容 var t = $('#tt'); t.textbox('textbox').bind('keydown', function(e){ if ( ...

  4. 微信小程序头部栏实现

    效果如图: 也就是实现红色框的部分. wxml代码 <view class="header {{scrollDown?'scrolled':''}}"> <vie ...

  5. 针对Eclipse闪退的两种解决方案

    闪退情况是:双击Eclipse登陆按钮,显示图标后,紧接着关闭: 1. 到eclipse文件夹中的eclipse.ini打开编辑在最后加入下面代码保存即可 -Dorg.eclipse.swt.brow ...

  6. web开发基础--字节序

    字节是网络传输上的最小单位,是web开发中需要了解的一个知识点. 1.有效位 在谈字节序前需要先了解有效位,有效位分为两种:最低有效位(LSB: Least Significant Bit) 和最高有 ...

  7. 现代 C++ 编译时 结构体字段反射

    基于 C++ 14 原生语法,不到 100 行代码:让编译器帮你写 JSON 序列化/反序列化代码,告别体力劳动.

  8. PHPCMS V9标签循环嵌套调用数据的方法

    PHPCMS V9的标签制作以灵活见长,可以自由DIY出个性的数据调用,对于制作有风格有创意的网站模板很好用,今天就介绍一个标签循环嵌套方法,可以实现对PC标签循环调用,代码如下: 在此文件里/php ...

  9. SQL SERVER DATETIME应用

    ),, , ),); ),, ),); ),, , ),); ),, ),); ),, , ),); ),, ),); How to get first and last day of previou ...

  10. windows下生成上传git时需要用的SSH密钥

    参考:Windows上传代码到Github 打开“Git Bash” 输入 ssh-keygen -C "your email" -t rsa 出现如下结果: 成功后,信息里会显示 ...