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 ...
随机推荐
- jquery 插件学习
练习jquery上的一个插件编写 1.标准的3个基本内容,根目录里面创建2个文件夹(存放css和js)和1个html页面文件: 2.测试的主html页面代码 <!DOCTYPE html> ...
- 在tornado中使用异步mysql操作
在使用tornado框架进行开发的过程中,发现tornado的mysql数据库操作并不是一步的,造成了所有用户行为的堵塞.tornado本身是一个异步的框架,要求所有的操作都应该是异步的,但是数据库这 ...
- vue的监听键盘事件的快捷方法
在我们的项目经常需要监听一些键盘事件来触发程序的执行,而Vue中允许在监听的时候添加关键修饰符: <input v-on:keyup.13="submit"> 对于一些 ...
- Kafka 学习翻译 - 介绍
Kafka是一个分布式的流式平台.可以从几个方面理解: 1. 三个重要的能力: 能够实现流式的发布和订阅数据,类似于消息队列或者企业级的消息分发系统. 能够在提供一定容错性和持久性能力的基础上存储数据 ...
- php 算法(冒泡排序)
//冒泡排序(从小到大) (从大到小改变for循环中的大于号为小于号即可) public function index(){ $arr = array(1,8,3, ...
- angular2配置使用ng2-bootstrap
第一步,安装.进入项目目录 npm install ng2-bootstrap bootstrap --save 第二步,angular-cli 配置 ng2-bootstrap src/.ang ...
- rails中文本匹配相似度gem包对比
测试数据 ["美科学家发现人体新器官","科学家发现新器官"],["曝高云翔悉尼被捕","高云翔涉性侵被捕"],[&qu ...
- 分治与递归-找k个临近中位数的数
问题描述:给定由n个互不相同的数组成的集合S以及正整数k≤n,试设计一个O(n)时间算法找出S中最接近S的中位数的k个数. 算法描述: 用线性时间选择实现的算法找到中位数 S’=除去中位数外的S S& ...
- 选择排序,C语言实现
选择排序是不稳定排序,时间复杂度为O(n^2). 选择排序类似插入排序,把数组分为两部分,一部分已经排好序,一部分未排序. 刚开始的时候所有的元素都未排序,已排序的部分为空.就好像你手里有十张牌,左手 ...
- [BZOJ3563&3569]DZY Loves Chinese
bzoj 加强版 sol 其实前一题还有一种解法的,具体方法请见bzoj讨论版. 以下是正解(?) 建一棵生成树. 考虑什么时候图会不连通:当且仅当存在一条树边被删除,同时所有覆盖了他的非树边也被删除 ...


