第三次作业

题目链接:http://www.cnblogs.com/fzuoop/p/5187275.html

Github链接:https://github.com/MeKChen2/object-oriented/tree/master/Calculator

看到题目的时候,一脸懵逼,毫无头绪。所以我先查找了queue的相关资料,整理学习之后开始第一次尝试。

第一次写这道题的时候,我定义了一个队列和一个字符数组,先通过函数从键盘上键入字符,测出字符数组长度,然后用循环将数组存入队列,再依次输出。

1.遇到了第一个问题,相邻数字间也分开了。

我想到加上一个判断条件,根据ASCII码的大小判断是否多输出一个回车。

2.遇到第二个问题:当运输符和前括号连接在一起时会多输出一行空行。

再加上几个判断条件,输出情况不同,最后调整到输出正确的情况。

3.此时主要的部分写好,但是还不满足第五点要求中的1)和2),再进一步修改代码。

这一步添加一个循环与一个判断条件就做到了。

4.这时候重新看了一遍题目,发现题目所用到的是string,而我用的是字符数组,不符合题目的意思,重新修改代码

将输入变成输入一个字符串,再转变为字符数组。

5.代码完成,多组数据测试后没出现错误。代码如下。

#include <iostream>
#include <string>
#include <queue>
using namespace std;

class Scan
{
public:
	queue<char>ToStringQueue(string  input);
	string tin;
};

class Print
{
public:
	void getprint(queue<char>str);
};

queue<char>Scan::ToStringQueue(string input)
{
	queue<char>str;
	char s[50]; //字符数组,用于存放字符串的每一个字符
	cout << "Please input a string" << endl;
	cin >> input;//输入字符串,当输入是Enter键时结束输入
	for (int m = 0; m < 50; m++)
	{
		s[m] = input[m];//将字符串变为字符数组
	}
	int n = strlen(s);//测出字符数组的长度
	int i, j = 0;
	for (i = 0; i < n; i++)
	{
		str.push(s[i]);
		if (s[i] >= 48 && s[i] <= 57)
		{
			j++;//如果输入是数字,则j++,以此判断是否超过十位数字
		}
	}
	if(j>=11)
	{
		cout << "ERROR!" <<endl;//当j>=11,即有超过10位数字时,程序报错
		exit(0);
	}
	return str;
}

void Print::getprint(queue<char>str)
{
	while (!str.empty())
	{
		if (str.front() >= 48 && str.front() <= 57)
		{
			cout << str.front();//输出队首元素
			str.pop();   //删除队首元素
		}
		else if (str.front() != 40 && str.front() != 41 && str.front() != 46)
		{
			cout << endl;
			cout << str.front() << endl;
			str.pop();
		}
		else if (str.front() == 40)
		{
			cout << str.front() << endl;
			str.pop();
		}
		else if (str.front() == 41)
		{
			cout << endl << str.front();
			str.pop();
		}
		else
		{
			cout << str.front();
			str.pop();
		}
	}
	cout << endl;
}

int main()
{
	Scan sc;
	Print pr;
	queue<char>str;
	str = sc.ToStringQueue(sc.tin);
	pr.getprint(str);
	system("pause");
	return 0;
}

反思:对于queue的知识没有掌握的非常好,有许多知识一开始只是能得到结果就去使用,而没有搞清楚知识的要点,原理。写完代码后浏览了别人的代码,觉得自己这次写的代码过于复杂,应该能够更加简化。

原文地址:https://www.cnblogs.com/kurisu/p/5215635.html