• 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. spring-集成redis

    Redis是key-value存储的非关系型数据库.Spring Data Redis包含了多个模板实现,用来完成Redis数据库的数据存取功能 1.如何连接Redis? Spring Data Re ...

  2. hadoop学习笔记——zookeeper平台搭建

    zookeeper是一个自动管理分布式集群的一个工具,以实现集群的高可用. 比如集群中的一个机器挂掉了,没有zookeeper的话就得考虑挂一个机器对剩下集群工作的影响,而有了zookeeper,它就 ...

  3. PC环境搭建——虚拟机配置双网卡

    Vmware虚拟机三种网络模式详解 TCP/IP协议四层模型: 应用层 传输层 网络层 物理接口 桥接模式时,主机和虚拟机在同一个网段,之间可以相互访问 NAT模式时,主机和虚拟机不在同一网段,之间通 ...

  4. #include stdio.h(A)

    /* 第一个*******知识点工程相关信息******** 1.创建工程 文件->新建->工程->win32 console applecation ->文件名不能为汉字 2 ...

  5. (mark)ubuntu16.04下安装&配置anaconda+tensorflow新手教程

    https://blog.csdn.net/m0_37864814/article/details/82112029

  6. JavaWeb——升级赛-学生成绩管理系统(1)jsp---19.01.03

    add.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"    pa ...

  7. C/S与B/S 区别以及优缺点

    1.什么是C/S结构 C/S (Client/Server)结构,即客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现 ...

  8. javascript之input字符串不为空

    今天我们来讲如何判断这个java中字符串输入是否为空 ------------------------当只有一个input的时候,我们来进行个判断这个值是否为空-------------------- ...

  9. Android开发——Context类的各种细节问题

    0. 前言   Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了.但实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节. ...

  10. 全国Uber优步司机奖励政策 (1月11日-1月17日)

    本周已经公开奖励整的城市有:北 京.成 都.重 庆.上 海.深 圳.长 沙.佛 山.广 州.苏 州.杭 州.南 京.宁 波.青 岛.天 津.西 安.武 汉.厦 门,可按CTRL+F,搜城市名快速查找. ...