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();
	}
}
posted @ 2016-03-25 23:24  雨勤未晴丶  Views(209)  Comments(0Edit  收藏  举报