• 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();
}
}

Calculator Part Ⅰ (代码规范化修改)的更多相关文章

  1. 项目git commit时卡主不良代码:husky让Git检查代码规范化工作

    看完 <前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) https://www.cnblogs.com/Yellow-ice/p/15349873 ...

  2. 实现textbox文本页面改变触发textchanged事件,代码里修改不触发

    今天弄控件遇到一个问题,就是TextChanged,如果在代码里或在页面修改修改text值,就会触发事情,但如果在textchanged里修改text,它会不会触发呢,不会,我调试跟踪,并没发现它会重 ...

  3. Cocos2D在新版Swift中常量枚举值引用代码的修改

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中是无法直接给一个CCB文 ...

  4. Unity3D代码动态修改材质球的颜色

    代码动态修改材质球的颜色: gameObject.GetComponent<Renderer>().material.color=Color.red;//当材质球的Shader为标准时,可 ...

  5. 【Unity笔记】用代码动态修改Animator状态机的状态

    通常情况下,Animator修改状态机,是在Animator定义参数(变量),状态之间建立切换的条件(箭头),然后代码中修改参数(变量),实现状态之间的切换. 而另一种情况下,不需要预先准备定义参数( ...

  6. abap编辑器中代码不可修改

    当出现abap编辑器中代码不能修改的情况,可以按如下设置: edit——> 修改操作——>关闭助手

  7. SVN:取消对代码的修改

    取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svnrevert就能取消之前的修改. svn revert用法如下: #svn revert[-R] s ...

  8. iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)

    代码: // 修改进度条的指针图片 [self.progressSlider setThumbImage:[UIImage imageNamed:@"player_slider_playba ...

  9. 在代码中修改TextView的DrawableRight图片

    TextView的xml <TextView android:id="@+id/textciew1" android:layout_width="match_par ...

随机推荐

  1. MySQL---事务、函数

    事务 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. delimiter \\ create PROCEDURE p1( OUT ...

  2. Linux中Kibana部署

    1.下载kibana安装包kibana-5.5.0-linux-x86_64.tar.gz tar –xzf kibana-5.5.0-linux-x86_64.tar.gz解压 把文件移动到 Mv ...

  3. layer 刷新某个页面

    一:使用layer.open打开的子页面 window.parent.location.reload()//刷新父页面 var index = parent.layer.getFrameIndex(w ...

  4. 用matplotlib库画图

    1.用例一 import matplotlib.pyplot as plt import numpy as np x=np.linspace(0,10,100) y=np.cos(2*np.pi*x) ...

  5. 实验吧web登陆一下好吗

    知识点: 万能密码'=' 一道登陆型的SQL注入题目,这种题目一般有四种题型: 1.在username中通过union联查select一个已知字符来与传递的password匹配完成登陆 2.使用万能密 ...

  6. Python破解压缩包密码问题

    所用知识 1. Pool 进程池 2. try...except 异常处理 3.枚举的方式 4.生成器的运用 逻辑关系 通过生成假密码去碰撞!捕获异常,一直碰撞,直到生成的密码与压缩包建立的密码对应, ...

  7. ORB-SLAM(十)LoopClosing

    构造函数 LoopClosing(Map* pMap, KeyFrameDatabase* pDB, ORBVocabulary* pVoc,const bool bFixScale); 主要分两部分 ...

  8. gdb 分析出错

    1 创建测试代码test.php <?php function test1(){ while(true){ sleep(1); } }echo getmypid() "\r\n&quo ...

  9. Sql Server Profiler使用

            在使用Entity Framework的过程当中,有时候需要看Entity Framework自动生成的Sql语句,在客户端可以使用跟踪的方法看到每次查询时的Sql语句,其实通过数据库 ...

  10. 获取附加在方法上的Attribute

    如下: class Program { static void Main(string[] args) { var methodInfo = typeof(Program).GetMethod(&qu ...