面向对象第三次作业(向计算器进发)
2016-02-24 14:19
197 查看
代码链接 https://github.com/424baopu/object-oriented/tree/master/Calculator
大概了解题意以后,感觉在字符串处理,返回队列以及接收队列上面有难度。
Scan.h
Scan.cpp
Print.h
Print.cpp
Calculator.cpp
题目要求
大概了解题意以后,感觉在字符串处理,返回队列以及接收队列上面有难度。
字符串处理
数字像‘100’输入时按‘1’‘0’‘0’存,但是却要按‘100’输出。而且包括小数点超过十位报错。 解决方法: 分开存储,用string number存数字,用string sign存符号。首先需要用判断字符是数字还是运算符号,是符号直接将字符存入sign中并存入队列。如果是数字需要继续判断下一位是否为数字或者小数点,是就继续存入number,不是说明这个数字已经写完了。判断数字长度,符合要求就存入队列,number清空。
返回队列以及接收
之前没有接触过返回队列的函数,在外援帮助下使用了字符串队列指针,也就是queue<string> *GetQueue()函数。不会指针,Print类接收的时候一开始又写了一个队列,指针指向它然后对这个队列操作,后来感觉没有必要,于是把Scan里面那个队列也删了。
意外状况
在输出时想的是for循环,次数等于队列个数,但是在操作中有出列,队列个数也在变化。还有一个是输出没有括号,因为输入是中文输入。。。在判断错误那里只写了不符合要求就输出错误,然后跳出循环,但是这样在不符合数字之前的数字及符号还是会输出,所以在Scan里面用了一个数m_ijudge判断,将它初始化为0,若有数字不符合要求就变成1,当为1时,不执行输出操作。
代码
Scan.h
#pragma once #include<string> #include<queue> using namespace std; class Scan { public: void ToStringQueue(string input); queue<string> *GetQueue(); int m_ijudge = 0; Scan(); ~Scan(); private: queue<string>*m_que = new queue<string>;//队列指针 };
Scan.cpp
#include "Scan.h" #include<iostream> using namespace std; Scan::Scan() { } void Scan::ToStringQueue(string input) { string number;//存储数字 string sign;//存储符号 for (int i = 0; i < input.size();) { //如果是符号直接存入字符串并存入队列 if (input[i]<'0' || input[i]>'9') { sign = input[i]; m_que->push(sign); i++; } //是数字 else { do { number = number + input[i];//将数字存入字符串 i++; } while (input[i] == '.' || input[i] >= '0' && input[i] <= '9'); if (number.size() > 10) { cout << "error" << endl; m_ijudge = 1;//改变m_ijudge值用以判断 break; } else { m_que->push(number);//数字存入队列 number = ""; //清空字符串 } } } }
Print.h
#pragma once #include<string> #include<queue> using namespace std; class Print { public: void queueTraverse(queue<string>*que); Print(); ~Print(); };
Print.cpp
#include "Print.h" #include<iostream> using namespace std; Print::Print() { } void Print::queueTraverse(queue<string>*que) { int a = que->size(); for (int i = 0; i < a;i++) { cout << que->front() << endl; que->pop();//访问一个队首元素出列一个 } } Print::~Print() { }
Calculator.cpp
#include"Scan.h" #include"Print.h" #include<iostream> #include<string> #include<queue> using namespace std; int main() { string s; cin >> s;//输入字符串s Scan sca; sca.ToStringQueue(s); queue<string>*q = sca.GetQueue(); //如果数字符合要求才输出 if (sca.m_ijudge == 0) { Print pri; pri.queueTraverse(q); } system("pause"); return 0; }
小思
关于队列知识是一头雾水的,构造函数和析构函数不太清楚怎么用,类和对象有个初步了解,但在类里面用指针头好大,不知道申请分配内存和释放内存怎么弄,就乱写了。。。
相关文章推荐
- UIAlertController 部分用法及属性
- DCM4CHEE概述
- 配置JDK环境变量
- JS编程艺术笔记(2)-编写JS代码的几点建议
- Python语言特性(一)
- Nudnik Photographer -Ural1260动态规划
- 索引和表的对应
- display中block、inline、inline-block区别
- svg图片自适应div容器大小
- Nudnik Photographer -Ural1260动态规划
- TOMCAT源码导入eclipse
- vim 常用命令
- Javascript中的特殊变量
- 《蒋勋说宋词》 读后感
- jquery的ajax同步和异步
- 理解LinkedHashMap
- Hadoop-1.2.1 Eclipse开发环境配置
- UIBezierPath精讲
- HDU5631(并查集)
- Android之项目全局变量的定义