题目:
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.
解题思路:这是一道很无聊的题,只要明确了规则就可以通过。leetcode上这道题的通过率只有10+%,我认为是由于规则不清晰引起的。我也是在不断的错误中明确了“有效”的具体规则定义以后才通过的。
代码:
class Solution { public: bool isNumber(const char *s) { bool num_begin=false,e_begin=false,dot=false,last_space=false,dot_exist=false,e_exist=false,dot_before=false,dot_after=false,zf_begin=false; if(s==nullptr)return false; while(*s!=‘\0‘){ if(isalpha(*s)){ if(!num_begin||*s!=‘e‘){ return false; } if(*s==‘e‘){ if(e_begin||zf_begin||e_exist){ return false; }else{ if(dot&&!dot_before)return false; e_begin=true; e_exist=true; dot=false; s++; continue; } } } if(isspace(*s)){ if(!num_begin){ s++; continue; }else{ last_space=true; s++; continue; } } if(isdigit(*s)){ if(!dot_exist){ dot_before=true; }else{ dot_after=true; } num_begin=true; if(last_space)return false; if(dot){ dot=false; s++; continue; } if(e_begin){ e_begin=false; s++; continue; } if(zf_begin){ zf_begin=false; s++; continue; } s++; continue; } if(!isalnum(*s)&&!isspace(*s)){ if(!dot&&*s==‘.‘&&!e_begin&&!dot_exist&&!e_exist){ if(last_space)return false; dot=true; dot_exist=true; num_begin=true; zf_begin=false; s++; continue; }else if(e_begin&&(*s==‘-‘||*s==‘+‘)){ e_begin=false; zf_begin=true; s++; continue; }else if(!num_begin&&(*s==‘-‘||*s==‘+‘)){ num_begin=true; zf_begin=true; s++; continue; }else{ return false; } } s++; } if(num_begin&&!e_begin&&(dot_before||dot_after)&&!zf_begin){ return true; }else{ return false; } } };
【Leetcode】Valid Number,布布扣,bubuko.com
原文:http://blog.csdn.net/ussam/article/details/21818325