65. 有效数字
验证给定的字符串是否为数字。
例如:"0"
=> true
" 0.1 "
=> true
"abc"
=> false
"1 a"
=> false
"2e10"
=> true
说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。
更新于 2015-02-10:C++
函数的形式已经更新了。如果你仍然看见你的函数接收 const char *
类型的参数,请点击重载按钮重置你的代码。
int my_type(char str){
if(str >= '0' && str <= '9')return 1;
else if(str == 'e')return 2;
else if(str == '.')return 3;
else if(str == '-')return 4;
else if(str == '+')return 5;
else if(str == ' ')return 0;
else return -1;
}
bool isNumber(char* s) {
int templen = strlen(s);
int len = templen - 1;
int ecount = 0;
int dcount = 0;
int flag = 0;
int ans = 0;
while(s[len] == ' '){
len--;
}
for(int i = 0;i <= len;i++){
if(my_type(s[i]) == 0){
if(flag != 0){
return false;
}
}
else if(my_type(s[i]) == 1);
else if(my_type(s[i]) == 2){
if(ecount == 0 && (my_type(s[i - 1]) == 1) || (my_type(s[i - 1]) == 3)){
if(my_type(s[i + 1]) == 1 || s[i + 1] == '+' || s[i + 1] == '-')
ecount++;
else
return false;
}
else
return false;
}
else if(my_type(s[i]) == 3){
if(dcount == 0 && (my_type(s[i + 1]) == 1 || my_type(s[i - 1]) == 1) && ecount == 0)
dcount++;
else
return false;
}
else if(my_type(s[i]) == 4 || my_type(s[i]) == 5){
if((flag == 0 || s[i - 1] == 'e') && (my_type(s[i + 1]) == 1) || s[i + 1] == '.');
else
return false;
}
else if(my_type(s[i]) == -1)
return false;
if(my_type(s[i]) != 0)
flag = 1;
}
if(flag == 0)
return false;
return true;
}
这个代码写的太丑了,自己都看不下去。。。。但是真的过的很艰难,数据真的好坑。。
注意测试案例:e的后面是不可以有‘.’的,e的前面是要有‘.’或者数字的(e3.33 false)(3.e2 true)
而且测试案例有正负号的,一开始忘了正号。。。。