面向对象程序设计第三次作业

c++计算器项目初始部分


1、 项目概述

  • 定义Scan类ToStringQueue(string input)接收四则运算表达式,提取数字和符号存入queue
  • 定义Print类获得输出所得队列并逐个输出

要求:

1. 当输入的数字超过10位(包括小数位)时,报错
2. 能够处理不超过10位的任意实数

2、 准备阶段

  • 先来唠嗑唠嗑hhh~第三次作业出来前看完了c++远征的起航篇与离港篇还有点小高兴完成了自己的计划o( ̄︶ ̄)o,结果第三次作业一出来就发现第二次作业中说的自学多少课时数不限根本不是真的(┬_┬)。这第三次作业没有看到一定程度根本做不了……
  • 好呗,那也只能继续看咯。看完群里学长说的封装篇(上)模板篇的模板函数与模板类(模板篇不知道是不是因为跳过好些篇章所以看的并不是很懂 0 0 然后用的时候好像也没怎么用到)
  • 啊,还有<queue>。说到这个不得不推荐:http://www.cplusplus.com/reference/queue/queue/
    高中信息技术竞赛学霸的强推hhh
    真的很好用,虽然都是英文解释查词好辛苦,但重要的是还有例子看!!!就算懒得查词,代码示例看一看也大概懂得七七八八知道怎么用了。

3、 尝试与解决

  • 首先,我并没有马上去定义Scan类Print类,而是先不管题目要求自己先在一个文件里写了一段基本上能满足输入和输出要求的代码,然后再逐步往题目要求方向改写。初稿如下:

     #include<iostream>
     #include <string>
     #include <queue>
     using namespace std;
     
     int main() {
     
     	string input;
     	cin >> input;
        
     	for (int i = 0; i <= input.size(); i++) {	
     		if (input[i] <= '9'&&input[i] >= '0' || input[i] == '.') {
     			if ((input[i + 1] <= '9'&&input[i + 1] >= '0') || input[i + 1] == '.') {
     				cout << input[i] ;
     			}
     			else {
     				cout << input[i] << endl;
     			}
     		}
     		else {
     			cout << input[i] << endl;
     		}
     	}
    
     return 0;
    
     }
    
  • 显然在输出时由是否输出回车来达成的输出格式的标准是不符合题目要求的。如何将数字拼接在一起而不是以单个字符存在着实困扰了我好久 0 0
    后来我想了个蠢办法……再定义一个 string 数组把 input[i] 转换成 string 类型,然后就可以进行数字的拼接啦啦啦~

     #include<iostream>
     #include <string>
     using namespace std;
     
     int main() {
     
     	string input;
     	cin >> input;
         
         //将input[i]转换成string类型
         string _input[10000];    
     	for (int i = 0; i <= input.size(); i++) {
     		_input[i] = input[i];
     	}
        
     	for (int i = 0; i <= input.size(); i++) {	
     		if (input[i] <= '9'&&input[i] >= '0' || input[i] == '.') {
     			if ((input[i + 1] <= '9'&&input[i + 1] >= '0') || input[i + 1] == '.') {
     				//cout << input[i] ;
     				_input[i] += _input[i + 1];
     				_input[i + 1] = _input[i];
     			}
     			else {
     				//cout << input[i] << endl;
     				cout << _input[i] << endl;
     			}
     		}
     		else {
     			//cout << input[i] << endl;
     			cout << _input[i] << endl;
     		}
     	}
    
     return 0;
    
     }
    
  • 接下来就是把输入和输出部分分别放到定义的Scan类Print类里面,再按题目要求用上<queue>的相关知识就没什么大问题啦。对了对了,题目要求的报错别忘啦~
    GG 之前贴代码竟然把代码最下面两行return 0;}给漏了...两个代码都给漏了...看来以后还是要认真再多看几遍( ̄m ̄)


4、 待改进

  • 那个用 string 数组把 input[i] 转换类型的方法总是感觉不是很好 0 0
    后面写的时候怕数组开小结果不幸Stack overflow。然后改用new申请内存算是过了,不过内存申请多的时候那个反应速度简直不忍直视。
posted @ 2016-02-21 23:38  H_BING  阅读(193)  评论(2编辑  收藏  举报