• 第三次作业


    题目链接: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的知识没有掌握的非常好,有许多知识一开始只是能得到结果就去使用,而没有搞清楚知识的要点,原理。写完代码后浏览了别人的代码,觉得自己这次写的代码过于复杂,应该能够更加简化。

  • 相关阅读:
    71 是否同一棵二叉搜索树(25 分)
    75 平衡二叉树的根(25 分)
    72 树种统计(25 分)
    2018(容斥定理 HDU6286)
    直观的理解计算机中的数值编码
    如何关闭emacs开启时自己打开的欢迎界面
    图论:最短路径:广度优先搜索(C语言实现)
    ubunut 14.04 将Caps Lock设置为Control
    邻接表:C语言实现
    队列(C语言实现)
  • 原文地址:https://www.cnblogs.com/kurisu/p/5215635.html
Copyright © 2020-2023  润新知