第三次作业

题目链接: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

include

include

using namespace std;

class Scan
{
public:
queueToStringQueue(string input);
string tin;
};

class Print
{
public:
void getprint(queuestr);
};

queueScan::ToStringQueue(string input)
{
queuestr;
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(queuestr)
{
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;
queuestr;
str = sc.ToStringQueue(sc.tin);
pr.getprint(str);
system("pause");
return 0;
}

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

posted @ 2016-02-25 01:26  MeKChen  阅读(156)  评论(2)    收藏  举报