您的位置:首页 > 其它

Valid Number:from LeetCode

2014-05-15 10:29 387 查看
题目大意是:给出一个字符串,判断是否为合法的数字

输入比较多样比如

".3" "2e12" "-2.2e-1" “ 2.2 ” 等等都是合法的,难点在于情况多比较复杂。

这里给出一个我的解法,网上也流传了类似的解法,用的都是bool开关(我起得名字呵呵)

看代码前还是说说思想吧。我们要判断的是非法情况,比方e不能出现两次,所以如果当前字符是e 所以如果已经有e了即 hase为真 则返回false。而e隔断了两个数字的关系,所以如果当前是e并且合法则 hasdot等都是前面的数字的情况了,所以现在算是没有小数点(但题目样例看了e后面的数不能有小数点,呵呵),等等情况啦。。。

class Solution {
public:
bool isNumber(const char *s) {
int begin=0;
int end=strlen(s)-1;
while(end>=0 &&(s[end]==' '||s[end]=='    '))end--;
while(s[begin]==' ' || s[begin]=='  ')begin++;
if(s[begin]=='\0')return false;
bool hasnum=false,hasdot=false,hase=false,hassig=false;
while(begin<=end)
{
if(isdigit(s[begin]))
{
hasnum=true;
}else if(s[begin]=='.')
{
if(hasdot || hase) return false;
hasdot=true;
}else if(s[begin]=='e'){

if(hase || !hasnum)return false;
hase=true;
hasnum=false;
hassig=false;
hasdot=false;
}else if(s[begin]=='+' || s[begin]=='-')
{
if(hasnum || hassig || hasdot)return false;
hassig=true;
}else
{
return false;
};
begin++;
}
if((hasdot||hase||hassig) && !hasnum)return false;
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: