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();
}
}
Calculator Part Ⅰ (代码规范化修改)的更多相关文章
- 项目git commit时卡主不良代码:husky让Git检查代码规范化工作
看完 <前端规范之Git工作流规范(Husky + Commitlint + Lint-staged) https://www.cnblogs.com/Yellow-ice/p/15349873 ...
- 实现textbox文本页面改变触发textchanged事件,代码里修改不触发
今天弄控件遇到一个问题,就是TextChanged,如果在代码里或在页面修改修改text值,就会触发事情,但如果在textchanged里修改text,它会不会触发呢,不会,我调试跟踪,并没发现它会重 ...
- Cocos2D在新版Swift中常量枚举值引用代码的修改
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中是无法直接给一个CCB文 ...
- Unity3D代码动态修改材质球的颜色
代码动态修改材质球的颜色: gameObject.GetComponent<Renderer>().material.color=Color.red;//当材质球的Shader为标准时,可 ...
- 【Unity笔记】用代码动态修改Animator状态机的状态
通常情况下,Animator修改状态机,是在Animator定义参数(变量),状态之间建立切换的条件(箭头),然后代码中修改参数(变量),实现状态之间的切换. 而另一种情况下,不需要预先准备定义参数( ...
- abap编辑器中代码不可修改
当出现abap编辑器中代码不能修改的情况,可以按如下设置: edit——> 修改操作——>关闭助手
- SVN:取消对代码的修改
取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svnrevert就能取消之前的修改. svn revert用法如下: #svn revert[-R] s ...
- iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)
代码: // 修改进度条的指针图片 [self.progressSlider setThumbImage:[UIImage imageNamed:@"player_slider_playba ...
- 在代码中修改TextView的DrawableRight图片
TextView的xml <TextView android:id="@+id/textciew1" android:layout_width="match_par ...
随机推荐
- AML与PIO整合问题
要想把PIO引擎封装成AML组件,面临如下问题(逐渐补充): 1)版本不兼容 内容项 AML PIO 选型 兼容? JDK 1.7 1.8 1.8 是 SPARK 1.6.1 2.1.1 HA ...
- 壹度DIY_微信小程序组件_小程序插件开发
开源免费插件,diy特有的页面机制,搭配30+自定义组件,让你的站点每一个页面都可以完全自定义,可无缝对接任意小程序,如有疑问加入qq壹度小程序交流群:302866773:或wx:liu2417301 ...
- 【Storm一】Storm安装部署
storm安装部署 解压storm安装包 $ tar -zxvf apache-storm-1.1.0.tar.gz -C /usr/local/src 修改解压后的apache-storm-1.1. ...
- MapReduce输入输出的处理流程及combiner
MapReduce 的输入输出 MapReduce 框架运转在<key,value> 键值对上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组 ...
- 使用bison和yacc制作脚本语言(3)
我们现在已经可以写好文法了,下一步我们打算开始正式创建工程了 在工程目录下,我们创建如下文件夹 ./include ./memory ./ms include文件夹下我们将放头文件 memory是内存 ...
- 网络文件系统nfs在ubuntu16.04的安装
1.搜索nfs-sudo apt-cache search nfs- 2.安装sudo apt-get install nfs-kernel-server 3.配置:/etc/exports /hom ...
- Spring Cloud 分布式事务管理
Spring Cloud 分布式事务管理 在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率. Spring Clo ...
- 【转载】四元数-Quaterion
原文:四元数-Quaterion 四元数(Quaterion) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议 ...
- springboot与activemq的使用
1.springboot和activemq的使用相对来说比较方便了,我在网上看了很多其他的资料,但是自己写出来总是有点问题所以,这里重点描述一下遇到的一些问题. 2.至于activemq的搭建和spr ...
- DSP5509开发之FPGA接口
1. DSP5509和FPGA或者CPLD之间是什么接口,DSP相对普通MCU,具有专门的硬件乘法器,程序和数据分开的哈弗结构,特殊的DSP指令,快速的实现各种数字信号处理算法.在一个周期内可以完成一 ...


