Calculator Part Ⅰ (代码规范化修改)
- GitHub/object-oriented
- 本次参照的C++代码规范
- 有一些规范内容在文件中其实并未提及,比如:空格的使用,修改的时候真的是一头雾水……根据文件中的例子,发现了一些文字部分没有提到的要求,如下:
1.赋值运算符、算术运算符、关系运算符、&&
、||
前后需要空格;
2.i++
的加号前后不需要空格,!
前后不需要空格;
3.逗号、分号后需要空格;
- 还有一些不清楚的规范,如下:
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();
}
}