• 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. AML与PIO整合问题

    要想把PIO引擎封装成AML组件,面临如下问题(逐渐补充): 1)版本不兼容 内容项 AML PIO 选型 兼容? JDK 1.7 1.8 1.8 是 SPARK 1.6.1 2.1.1     HA ...

  2. 壹度DIY_微信小程序组件_小程序插件开发

    开源免费插件,diy特有的页面机制,搭配30+自定义组件,让你的站点每一个页面都可以完全自定义,可无缝对接任意小程序,如有疑问加入qq壹度小程序交流群:302866773:或wx:liu2417301 ...

  3. 【Storm一】Storm安装部署

    storm安装部署 解压storm安装包 $ tar -zxvf apache-storm-1.1.0.tar.gz -C /usr/local/src 修改解压后的apache-storm-1.1. ...

  4. MapReduce输入输出的处理流程及combiner

    MapReduce 的输入输出 MapReduce 框架运转在<key,value> 键值对上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组 ...

  5. 使用bison和yacc制作脚本语言(3)

    我们现在已经可以写好文法了,下一步我们打算开始正式创建工程了 在工程目录下,我们创建如下文件夹 ./include ./memory ./ms include文件夹下我们将放头文件 memory是内存 ...

  6. 网络文件系统nfs在ubuntu16.04的安装

    1.搜索nfs-sudo apt-cache search nfs- 2.安装sudo apt-get install nfs-kernel-server 3.配置:/etc/exports /hom ...

  7. Spring Cloud 分布式事务管理

    Spring Cloud 分布式事务管理 在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率. Spring Clo ...

  8. 【转载】四元数-Quaterion

    原文:四元数-Quaterion 四元数(Quaterion)   罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   ...

  9. springboot与activemq的使用

    1.springboot和activemq的使用相对来说比较方便了,我在网上看了很多其他的资料,但是自己写出来总是有点问题所以,这里重点描述一下遇到的一些问题. 2.至于activemq的搭建和spr ...

  10. DSP5509开发之FPGA接口

    1. DSP5509和FPGA或者CPLD之间是什么接口,DSP相对普通MCU,具有专门的硬件乘法器,程序和数据分开的哈弗结构,特殊的DSP指令,快速的实现各种数字信号处理算法.在一个周期内可以完成一 ...