• Calculator Part Ⅰ (代码规范化修改)


    • GitHub/object-oriented
    • 本次参照的C++代码规范
    • 有一些规范内容在文件中其实并未提及,比如:空格的使用,修改的时候真的是一头雾水……根据文件中的例子,发现了一些文字部分没有提到的要求,如下:
      1.赋值运算符、算术运算符、关系运算符、&&||前后需要空格;
      2.i++的加号前后不需要空格,!前后不需要空格;
      3.逗号、分号后需要空格;
      alt text
      alt text
      alt text
    • 还有一些不清楚的规范,如下:
      1.cin>>的“cin”与“>>”之间是否需要空格?
      2.代码注释的规范;
      3.用空行将代码按照逻辑片段划分,可是划分之后感觉整个代码都散掉了,是我划分的太细了么?

    【修改后的代码】

    main.cpp

    #include "scan.h"
    #include "print.h"
    #include<iostream>
    #include<string>
    #include<queue>
    using namespace std;
    
    int main()
    {
    	Scan in;
    
    	Print out;
    
        string input;
    	cin >> input;
    
    	//首先判断输入字符串中数字串长度不超过10位
    	if (!in.checkNumberLen(input))
    	{
    		return 0;
    	}
    
    	out.printQueue(in.ToStringQueue(input));
    
    	return 0;
    }
    

    scan.h

    #ifndef SCAN_H
    #define SCAN_H
    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    
    class Scan
    {
    	public:
    		queue<string> ToStringQueue(string input);
    		bool checkNumberLen(string input);
    	private:
    		queue<string> m_q;
    };
    
    #endif
    

    scan.cpp

    #include "scan.h"
    #include<iostream>
    #include<string>
    #include<queue>
    using namespace std;
    
    bool Scan::checkNumberLen(string input)
    {
    	int numberLen = 0; 
    
    	for (int i = 0; i < input.size(); i++)
    	{
    		if (input[i] == 45 || input[i] == 47 || (input[i] < 44 && input[i] > 39))
    		{
    			numberLen = 0;
    		}
    
    		else if (input[i] > 47 && input[i] < 58)	//小数点不参与计数
    		{
    			numberLen++;
    
    			//当连续数字达到10位时报错并退出
    			if (numberLen > 10)
    			{
    				cout << "[ERROR]The length of number out of ten!" << endl;
    
    				return false;
    				break;
    			}
    		}
    	}
    
    	return true;
    }
    
    queue<string> Scan::ToStringQueue(string input)
    {
    	int numberLen = 0;
    
    	string numbers;		//numbers用于存储连续数字字符
    	string operators;	//operatoes用于存储运算字符
    
    	for (int i = 0; i < input.size(); i++)
    	{
    		if (input[i] == 45 || input[i] == 47 || (input[i] < 44 && input[i] > 39))
    		{
    
    			//当运算符左端出现数字,代表上一串数字序列已经结束,这时把这个数字串推入序列 
    			if (input[i-1] > 47 && input[i-1] < 58)
    			{
    				for (int j = i - 1; numberLen > 0; j--, numberLen--)
    				{
    					numbers = input[j] + numbers;    //将多个数字字符组成一个字符串
    				}
    
    				m_q.push(numbers);
    				numbers.clear();	//须清空字符串numbers
    				numberLen = 0;		//须归零数字串长度numberLen
    			}
    
    			operators = input[i];
    			m_q.push(operators);
    		}
    
    		else if (input[i] > 47 && input[i] < 58)   //在ASCII代码中表示数字的范围
    		{
    			numberLen++;
    
    			if (i == input.size() - 1)
    			{
    				for (int j = i; numberLen > 0; j--, numberLen--)
    				{
    					numbers = input[j] + numbers;
    				}
    
    				m_q.push(numbers);
    				numbers.clear();
    			}
    		}
    	}
    
    	return m_q;
    }
    

    print.h

    #ifndef PRINT_H
    #define PRINT_H
    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    
    class Print
    {
    	public:
    		void printQueue(queue<string> m_q);
    };
    
    #endif
    

    print.cpp

    #include "print.h"
    #include<iostream>
    #include <cstdlib>
    #include<string>
    #include<queue>
    using namespace std;
    
    void Print::printQueue(queue<string> m_q)
    {
    	while(!m_q.empty())		//调用<queue>中自带的函数,将元素弹出,直至队列为空
    	{
    		cout << m_q.front() << endl;
    		m_q.pop();
    	}
    }
  • 相关阅读:
    分时区查询问题解决
    .htaccess伪静态实例分享
    net mvc 小目标
    PHP中钩子函数的实现与认识
    session
    修改net基本三层 动软生产
    格式化问题
    数据字典
    关联数据和formatter问题-easyui+微型持久化工具
    说说JSON和JSONP,也许你会豁然开朗
  • 原文地址:https://www.cnblogs.com/wyq0808/p/5321548.html
Copyright © 2020-2023  润新知