第二次作业


作业:object-oriented  
  

作业要求

完成过程

  在刚刚看完题目时的我,是不太理解题目意思的,因为我还没有学过有关queue的只是,所以我只好暂时先不开始做题目,而是通过百度,询问同学等等的方式,展开有关queue知识的学习,但是因为我没找到相关教学视频,单纯的看文字又有不太理解的地方,所以此次作业中queue的知识可能没有正确使用。
  第一次完成代码时,我还没有考虑作业上提出的要求,只是先把大体的代码给打出来了


`#include "Scan.h"`
`#include "Print.h"`
`#include `
`#include `
`#include `
`#include `
using namespace std;

class Print
{
    public:
		void output (queue m_queQ)
		{                     
			while (m_queQ.size())
			{
				cout << m_queQ.front() <ToStringQueue(string input)
		{
			queue  m_queQ;
			int i;
			bool j=false;
			string m_strS;
			for (i=0; i='0' && input[i+1]<='9' && input[i+1]>='0')
				{
				    m_strS+=input[i];
				    j=false;
				}
                                else
		                {
		                     m_strS+=input[i];
	                             j=true;
                    		}
                                if(j)
	                	{
	                	     m_queQ.push(m_strS);	
	                	     m_strS.clear();
	                    	}
	              	}
	              	return m_queQ;
		}
};

int main ()
{
    Scan scan;
	Print print;
	string s;
	cin >>s;
	queue q=scan.ToStringQueue(s);
	print.output(q);
	return 0;
}

先尝试运行一次,发现自己忘记处理有小数点的情况,于是在判断中多了一个判断

else if (input[i]=='.' || input[i+1]=='.')
                 {
                    m_strS+=input[i];
                    j=false;
                    k=-1;
                 }

再次运行,可以顺利通过了,于是开始考虑题目的要求,首先我引入一个变量l去判断每个m_strS的长度,结果发现这样在算数字位数时会将小数点也算进去,于是又引入变量k,通过k值判断是否有小数点,同时在Print中判断是否需要报错。在经过了修改后,我的代码总体如下:#include "Scan.h"


`#include "Print.h"`
`#include `
`#include `
`#include `
`#include `
using namespace std;

class Scan
{
    public:
		queueToStringQueue(string input)
		{
			queue  m_queQ;
			int i;
			bool j=false;
			string m_strS;
            int k=0;  //利用k值判断数字中是否含有小数点,方便之后对数字位数的统计// 
            int l;
			for (i=0; i='0' && input[i+1]<='9' && input[i+1]>='0')
				{
					m_strS+=input[i];
					j=false;
				}
				else if (input[i]=='.' || input[i+1]=='.')
                {
                    m_strS+=input[i];
                    j=false;
                    k=-1;
                }
                else
				{
					m_strS+=input[i];
					j=true;
				}
                l=m_strS.size();
                if (l+k>10)
                {
                	m_queQ.push("E");//在队列最后插入E,标记此时得到的数字超过十位// 
                    break;
                }
				if(j)
				{
					m_queQ.push(m_strS);	
					m_strS.clear();
				}
			}
			return m_queQ;
		}
};

class Print
{
	public:
		void output (queue m_queQ)
		{
			bool t;// t表示报错后,跳过之后的输出// 
			t=true;
            if (m_queQ.back()=="E")//先前插入的E在此时发挥作用,队尾为E则需要报错// 
            {
                cout <<"Error"<< endl;
                t=false;
            }
			while (m_queQ.size() && t)
			{
				cout << m_queQ.front() <>s;
	queue q=scan.ToStringQueue(s);
	print.output(q);
	return 0;
}
运行后发现运行还算正常,暂时没有发现哪边有错,于是将文件Push到了github上。(由于在使用github时一时失误,把上次的作业给删除了,所以这次只好重新上传QAQ。。不能再悲剧)