您的位置:首页 > 其它

Leetcode--Valid Number

2014-10-23 20:42 302 查看
Validate if a given string is numeric.

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Hide Tags
Math String

经过将近一系列的Wrong Answer,得到如下例子:

"e" false

"." false

" " false

".1" true

"3." true

". 1" false

"1 " true

"46.e3" true

"0.e" false

"6e6.5" false

通过以上例子,可以得到如下规则:

1)小数点的前或者后要有数字

2)e的前后必须都有数字,且后面必须是整数

3)处理字符串前面的空格和结尾的空格,去掉首位空格的子串中不能再有空格

class Solution {
public:
bool isNumber(const char *s) {
int len=strlen(s);
if(len<=0)
return false;

int i=0;
while(i<len&&s[i]==' ') i++;
while(len>0&&s[len-1]==' ') len--;

if(i<len&&s[i]=='+'||s[i]=='-')
i++;
int digit=0;//判断s中是否有数字,有数字为1,没有数字为0
for(;i<len;i++)
{
if(isdigit(s[i]))
{
digit=1;
continue;
}
else if(s[i]=='.')
{
i++;
while(i<len&&isdigit(s[i]))
{
digit=1;
i++;
}

if(i<len&&s[i]=='e'&&digit==1)
{
int poste=0;//e的后面必须有数字,并且数字是整数
i++;
if(i<len&&s[i]=='+'||s[i]=='-')
i++;
while(i<len&&isdigit(s[i]))
{
poste=1;
i++;
}

if(i==len&&poste==1)
return true;
else
return false;

}
else if(i==len&&digit==1)
return true;
else
return false;
}
else if(s[i]=='e'&&digit==1)
{
int poste=0;
i++;
if(i<len&&s[i]=='+'||s[i]=='-')
i++;
while(i<len&&isdigit(s[i]))
{
poste=1;
i++;
}

if(i==len&&poste==1)
return true;
else
return false;
}
else
return false;
}

if(digit==1)
return true;
else
return false;

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