[LeetCode]—Valid Number 判断字符串是否为合法数据(科学计数法)
2014-07-04 13:29
453 查看
Valid Number
Validate if a given string is numeric.
Some examples:
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
该题目测试数据集特别丰富。
主要注意以下明显情况:
1、前后出现空白。
2、2e或者2E,E后面未接其他数字是false的
3、小数点出现的位置。(只能在e前)
4、e前面要有数据出现 ".E"或“.”是不对的
很经典的一个划分,就是以E为界限,划分为前后2部分 firstPart 和secondPart 来讨论各种情况。
最后:根据数据集慢慢测试调整。
学习下文后,得出代码:http://www.cnblogs.com/remlostime/archive/2012/11/18/2775938.html
还有一种方法:判断是否为数字,类似于函数strtod()
函数名: strtod
功 能: 将字符串转换为double型值
用 法: double strtod(char *str, char **endptr);
函数说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。
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.
该题目测试数据集特别丰富。
主要注意以下明显情况:
1、前后出现空白。
2、2e或者2E,E后面未接其他数字是false的
3、小数点出现的位置。(只能在e前)
4、e前面要有数据出现 ".E"或“.”是不对的
很经典的一个划分,就是以E为界限,划分为前后2部分 firstPart 和secondPart 来讨论各种情况。
最后:根据数据集慢慢测试调整。
学习下文后,得出代码:http://www.cnblogs.com/remlostime/archive/2012/11/18/2775938.html
class Solution { public: bool isNumber(const char *s) { assert(s); int n=strlen(s); const char *end; end= s+n-1; bool dotAppear=false; bool eAppear=false; bool firstPart=false; //以E为分界线 bool secondPart=false; while(isspace(*s))s++; while(isspace(*end))end--; if(*s=='+'|| *s=='-')s++; while(s!=(end+1)){ if(isdigit(*s)){ if(!eAppear) firstPart=true; else secondPart=true; } else if(*s=='.'){ if(dotAppear ||eAppear || secondPart) return false; else dotAppear=true; } else if(*s=='e' || *s=='E'){ if(eAppear) return false; else eAppear=true; } else if(isspace(*s)) { return false; } else if(*s=='+' || *s=='-'){ if(*(s-1)=='e' || *(s-1)=='E') ; else return false; } else{ return false; } s++; } if(!firstPart)return false; else if(eAppear && !secondPart) return false; return true; } };
还有一种方法:判断是否为数字,类似于函数strtod()
函数名: strtod
功 能: 将字符串转换为double型值
用 法: double strtod(char *str, char **endptr);
函数说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。
// @author 连城(http://weibo.com/lianchengzju) /*调用strtod()*/ class Solution{ public: bool isNumber(const char *s){ char *endptr; strtod(s,&endptr); if(endptr==s)return false; //数字就不存在 例如:s=" " for(;*endptr!='\0';++endptr) if(!isspace(*endptr))return false; //如果剩余的不是空格,就表示出错。 return true; } };
相关文章推荐
- LeetCode Valid Number(判断字符串是否是合法的数字表示 )
- LeetCode65——Valid Number(使用DFA)来判断字符串是否为数字
- Java日期转换SimpleDateFormat格式大全 和 判断是否为合法的日期时间字符串?
- 判断字符串是否是合法的EMail
- js中判断字符串是否为合法的email格式
- C#判断字符串是否合法
- 判断一个字符串是否为合法ip地址(ipv4)
- js中判断字符串是否为合法的email格式
- C判断一字符串是否是合法的IP地址
- HDU_2024——判断字符串是否是c语言合法标识符
- 【SAS NOTES】kindex判断字符串中是否含某子字符串& 用where在data步中选择部分数据
- ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。
- JS判断字符串格式是否合法
- C# 判断一字符串是否为合法数字(正则表达式)
- 各种判断输入数据是否合法的js
- js中判断字符串是否为合法的email格式
- 判断字符串是否是合法的EMail
- 判断一个日期字符串是否合法--COleDateTime::ParseDateTime
- JS判断字符串格式是否合法
- 判断是否字符串重组 Scramble String @LeetCode