您的位置:首页 > 其它

【Leetcode】Valid Number

2014-03-22 19:12 218 查看
题目:

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;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: