示意数值的字符串(模拟+剑指offer)
表示数值的字符串(模拟+剑指offer)
错误部分:
其中组后一组是我后来想到的,剑指offer书上的代码是不能通过的。当然我考虑的也不是非常周全的,还有很多情况没列举。
然后补充用引用的做法,个人比较喜欢(习惯)用引用。
表示数值的字符串
- 参与人数:615时间限制:1秒空间限制:32768K
- 通过比例:21.98%
- 最佳记录:0 ms|8552K()
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
链接:http://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:能构成一个数值的字符串必须遵循一些规则,我给出一些测试数据说明:
正确部分:
15 .235 -55 +56 +5e6 5.3E6 3.1256 12e+523
错误部分:
-55.21e6.32 5.6e6.5e3 5e 5+ 6- 12e5+523 1s523 1.2.3 +-5 5*6 12+26 e55
其中组后一组是我后来想到的,剑指offer书上的代码是不能通过的。当然我考虑的也不是非常周全的,还有很多情况没列举。
首先是用指针来做:
class Solution { public: bool isNumeric(char* string) { if(string==NULL) return false; if(*string=='+'||*string=='-') ++string; if(*string=='\0') return false; bool bo=true; scanDigits(&string); if(*string!='\0') { if(*string=='.') { ++string; scanDigits(&string); if(*string=='e'||*string=='E') { if((string-1)>0&&*(string-1)>='0'&&*(string-1)<='9') bo=isExponential(&string); else bo=false; } } else if(*string=='e'||*string=='E') { if((string-1)>0&&*(string-1)>='0'&&*(string-1)<='9') bo=isExponential(&string); else bo=false; } else bo=false; } return *string=='\0' && bo; } void scanDigits(char **st) { while(**st!='\0' && **st>='0' && **st<='9') { ++(*st); } } bool isExponential(char **st) { ++(*st); if(**st=='+'||**st=='-') ++(*st); if(**st=='\0') {return false;} scanDigits(st); if(**st=='\0'){return true;} else {return false;} } };
然后补充用引用的做法,个人比较喜欢(习惯)用引用。
class Solution { public: bool isNumeric(char* string) { if(string==NULL) return false; if(*string=='+'||*string=='-') ++string; if(*string=='\0') return false; bool bo=true; scanDigits(string); if(*string!='\0') { if(*string=='.') { ++string; scanDigits(string); if(*string=='e'||*string=='E') { if((string-1)>0&&*(string-1)>='0'&&*(string-1)<='9') bo=isExponential(string); else bo=false; } } else if(*string=='e'||*string=='E') { if((string-1)>0&&*(string-1)>='0'&&*(string-1)<='9') bo=isExponential(string); else bo=false; } else bo=false; } return *string=='\0' && bo; } void scanDigits(char* &st) { while(*st!='\0' && *st>='0' && *st<='9') { ++(st); } } bool isExponential(char* &st) { ++(st); if(*st=='+'||*st=='-') ++(st); if(*st=='\0') {return false;} scanDigits(st); if(*st=='\0'){return true;} else {return false;} } };
版权声明:本文为博主原创文章,未经博主允许不得转载。