第三次作业【补完作业】

第三次作业 传送门

------ 一次从C语言到C++的迁徙

心路历程

  • 看到这次题目,原来以为很简单就能实现的问题,但是过了几天后我才意识到这不是那么简单的事情。因为这不是我熟悉的c语言,而是一个完全不认识的新领域c++。

  • 开学前,刚刚提交了没打完的代码,只知道用.h和main函数的链接,至于.h要加cpp的文件一无所知,于是自己的.h就打在了main cpp里。于是带着未完成的使命,开始了下学期的生活。一开始课程不紧,还会有时间去看下自己的代码如何改进,在那个时候我知道一个.h文件后要加一个cpp文件。所以一共需要五个文件,我很早就学到了public,private,protect一类的关于类的事物,但是我只知道他就是他,跟c语言并不知道该如何联系在一起,而当时我很感谢这道题目带我认识了string这个类型,让我在开学后的c语言作业里有了一些捷径,学习string甚至比char类型还要用心,和彻底

  • 时间不遂人愿,课程变多了,也就没什么时间去管理。直到今天,我的舍友告诉了我之间的联系.h的cpp文件里的private就是相当于一个函数的局部变量,而public是全局变量,对于main函数而言,这个.h相当于c语言中写一个函数,将c语言和c++的联系摆在我的面前,那么这道题我觉得我可以了。其实这么看下来,我所不理解的就是c++这个变量的使用,以及一个初学者如何把他们联系在一起
    

以下是代码部分

scan.h

#include <iostream>
#include <queue>
#include <string>
using namespace std;
class Scan
{
public:
	queue<string> ToStringQueue(string a);                   //定义一个类似于c语言的调用函数
	queue<string>result_queue;                               //定义一个队列用于输出

private:

	string a;
	int i;
	string b;                                                //对于scan.h中的cpp文件的局部变量

protected:


};

scan.cpp

#include"Scan.h"
    queue<string>Scan::ToStringQueue(string a)
    {
	    for (i = 0; i < a.size(); i++)                            //遍历一遍输入的string
	    {
		if (a[i] > 47 && a[i] < 58 || a[i] == '.')        //0-9和.归入string b。
			b += a[i];
		else                                              //一旦出现了非这些符号,把b推进队列
		{
                if (!b.empty())                          
                    result_queue.push(b);              

			b.clear();
			b = a[i];                                  //另外要考虑到如果两个连续为比如‘*(’的情况下要检测是否b为空,否则会输出空格
			
                if (!b.empty())
                    result_queue.push(b);
			b.clear();

		}
	}
	if (!b.empty())
	{
		result_queue.push(b);
	}
	return result_queue;                                        //将结果的队列返回给主函数
}

print.h

#include<string>
#include<queue> 
#include<iostream>
using namespace std;
class print
{
    public:
	    void PrintStringQueue(queue<string>result_queue);           //定义输出函数

    private:
	    int i, a;
};

print.cpp

#include"print.h"
void print::PrintStringQueue(queue<string> result_queue)
{
    a = result_queue.size();
    for (i = 0; i < a; i++)
    {
	cout << result_queue.front() << endl;                //循环输出队列首元素,然后用.pop删除首元素
	result_queue.pop();
    }
}

main.cpp

#include<iostream>
#include<string>
#include<queue>
#include"Scan.h"
#include"print.h"
using namespace std;
int pd(string str)                                                    //判断这个数字是否超过10位
{
	    int i, j = 0, k = 0;                
	    for (i = 0; i < str.size(); i++)
	    {
		    if (str[i] <= '9'&&str[i] >= '0' || str[i] == '.')
	    {
		    j++;
		    if (str[i] == '.')                            //针对小数点的话,应该判断是否超过11位
		    {
			    k = 1;
		    }
		    if (k == 1 && j > 11)
		    {
			    return 1;                             //不符合要求返回1
			    break;
		    }

		    if (k == 0 && j > 10)
		    {
			    return 1;
			    break;
		    }

	    }
	    else
	    {
		    j = 0;                                        //一个数结束清0
	    }
        }
        return 0;

}

int main()
{
        queue<string>q;                                                //定义一个新的队列q,用于交换scan的队列值,放入print里
        Scan sc;
        print pr;
        string input;
        cin >> input;
        if (pd(input) == 0)                                            //利用0 1 之间的关系,类似于bool但是不太会用,老老实实这样做了。
        {
            q = sc.ToStringQueue(input);    
	    pr.PrintStringQueue(q);
        }
        else
        {
            cout << "error" << endl;                    
        }
        return 0;
 }

章末总结

  • 本次作业,真正的带我们走入了c++的世界,在这个世界中,我认识到了如何把一个零碎的文件,集合成一个强大的,完整的个体。另外string和queue对象的使用,尤其是前者,对我现在的c语言的代码编程,有了很大的帮助。同时感谢我的舍友对我的点拨和帮助。*
posted @ 2016-04-04 18:58  kobe96  阅读(148)  评论(0编辑  收藏  举报