Valid Number
alidate 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.
断断续续做了2小时,各种情况想不到,最后崩溃了……
由于科学计数法的引入,要考虑 '.' '-' '+''e'和数字的位置、个数关系。
如果能够了解以上的字符出现时在之前可以出现的字符都有哪些,这个问题就能够顺利解决。
最后贴上水码,以后再重新做一遍。
class Solution {
public:
bool isNumber(const char *s) {
int i = 0;
int flag_num = 0;
//int flag_numa = 0;
int flag_dot = 0;
int flag_dota = 0;
int flag_minus = 0;
int flag_plus = 0;
int flag_e = 0;
int flag_ea = 0;
int flag_blank = 0;
int flag_blanka = 0;
while(s[i]!='\0')
{
if(s[i] == ' ')
{
if(flag_num == 1|| flag_dot ==1 || flag_plus == 1)flag_blank = 1;
i++;
continue;
}
if(s[i] >= '0' && s[i] <= '9')
{
flag_num = 1;
if(flag_e == 1)flag_ea = 1;
if(flag_dot == 1)flag_dota = 1;
if(flag_blank == 1)return 0;
i++;
continue;
}
if(s[i] == '.')
{
if(flag_dot == 1 || flag_blank == 1 ||flag_e == 1 )return 0;
else
flag_dot = 1;
//if(s[i+1] == ' ')return 0;
i++;
continue;
}
if(s[i] == '-')
{
if(flag_minus == 1)return 0;
if(flag_num == 1 && flag_e == 1 );
else if(flag_num == 1 || flag_dot == 1 )return 0;
if(flag_minus == 0)flag_minus = 1;
else
{
if(flag_num == 1)return 1;
else flag_num = 1;
}
i++;
continue;
}
if(s[i] == '+')
{
if(flag_ea == 1)return 0;
if(flag_num == 0 && flag_plus == 0|| flag_num == 1&&flag_e == 1)i++;
else return 0;
//if(flag_dot == 1 && flag_num == 1)return 0 ;
if( flag_dot ==1 && flag_e == 0)return 0;
flag_plus = 1;
continue;
}
if(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z')
if(s[i] == 'e' && flag_e == 0 && flag_num == 1 ) {i++;flag_e=1;}
else return 0;
}
//if(s[i-1] == '.')return 0;
if(flag_e == 1 && flag_ea == 1)return 1;
if(flag_e == 1 && flag_ea == 0)return 0;
if(flag_dot == 1 && flag_dota == 1)return 1;
//if(flag_dot == 1 )return 0;
if(flag_num == 1)return 1;
else return 0;
}
};
posted on 2014-03-01 14:08 pengyu2003 阅读(202) 评论(0) 收藏 举报
浙公网安备 33010602011771号