Valid Number
来源:互联网 发布:围攻龙刃堡 mac 编辑:程序博客网 时间:2024/05/16 14:54
Validate if a given string is numeric.
Some examples:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
判断给定字符串是否表示数字。
其实一开始我也没考虑全,代码是边跑边补充的,也就是说,从一开始个的这5个examples开始写,把自己能想到的先写入代码里,测试是否通过。
当然肯定不可能通过,观察不能通过的测试用例有什么特点是自己的代码里没有的。
比如一开始我们知道:
1、带有字母必定return false,e除外。
2、小数点只能有一个
3、不能带有空格
到后面出现的一些测试用例开始补充:
4、“-1” “+0.8” 说明要把正负号考虑进去
5、“ 1” “2 ”像这样的也能够表示数字,也就是说考虑空格,与第三点不同,我将这样的空格不当做空格,意思就是只有当空格前后都有非空格的字符时,才认定为我所定义的空格,只要出现我所定义的空格就判断为 false
6、结合4和5这两点,我们知道正负号不一定在字符串最开头 也就是说 “ -1”像这样前面存在空格的也应该判断为 true
7、“3567e+9” 比如这样的正负号出现在e的后面,因此除了判断是否为整体的正负,还有判断是不是e后面的正负号,因此在出现第一个字符e时,要将位置记录
等等。。。我就不一一列出来了,根据个人的代码补充,出现的不通过的例子不完全相同,只要不断根据不通过的用例补充代码,最终就完成了。
代码如下:
bool isNumber(string s) {/*num是否有数字,space是否有空格,realstart开头为空格时真正开始的位置,point是否有小数点,h表示后面,m表示前面,pointh表示小数点后是否有合理字符,pointm表示小数点前是否有合理字符,e是否有e,eh与em同理,ep为e的位置(判断正负号的位置是否合理)*/ bool num = false; bool space = false; int realstart = 0; bool point = false; bool pointh = false; bool pointm = false; bool e = false; bool eh = false; bool em = false; int ep = -1; for(int i = 0; i < s.size(); ++i){ if(space){ if(s[i] == ' '){//连续空格 continue; } else{ return false; } } ///////////////////////////////////////////////////////////////////////// if(s[i] == '-' || s[i] == '+'){///正负号 if(i != realstart && i != ep + 1){ return false; } else{ if(i+1 == s.size() || s[i+1] > '9' || s[i+1] < '0' && s[i+1] != '.'){ return false; } } } else if(s[i] <= '9' && s[i] >= '0'){//数字 num = true; } else if(s[i] == ' '){//空格 if(i-1 >= 0 && s[i-1] != ' '){ space = true; } else{ if(!space){ realstart++; } } } else if(s[i] == '.'){//小数点 if(point || e){ return false; } else{ point = true; if(i+1 != s.size() && s[i+1] <= '9' && s[i+1] >= '0'){ pointh = true; } if(i-1 >=0 && s[i-1] <= '9' && s[i-1] >= '0'){ pointm = true; } } } else if(s[i] == 'e'){//科学计数e if(e){ return false; } else{ e = true; ep = i; if(i+1 != s.size() && s[i+1] != '.' && s[i+1] != ' '){ eh = true; } if(i-1 >= 0 && ((s[i-1] <= '9' && s[i-1] >= '0') || s[i-1] == '.')){ em = true; } } } else{ return false; } } if(point){ if(!pointm && !pointh){ return false; } } if(!num){ return false; } if(e){ if(!em || !eh){ return false; } } return true; }
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Valid Number
- Eclipse添加Spket插件实现ExtJs智能提示
- C#中的异步调用及异步设计模式(三)——基于事件的异步模式
- css了解
- 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
- 逆向工程核心原理学习笔记(十一):栈
- Valid Number
- google authenticator 配置动态密码登录
- AndroidMenifest.xml全解
- python命令行解析工具argparse模块
- Storm集群中的组件介绍
- Fastjson 实体类JSON化过滤字段操作-PropertyFilter
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- SpringBoot框架下基于Junit的单元测试
- CentOS7安装Hadoop2.7.3完整步骤