Leetcode之Valid Number

题目:

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.

要写对这题着实不容易,很多细节需要考虑。先看看测试用例有哪些,然后再写就比较有针对性。最后看看哪些test case错了,再修一下bug。

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Solution
{
public:
     bool isNumber( const  char *s)
    {
         // Start typing your C/C++ solution below
         // DO NOT write int main() function
         if (s ==  NULL)
             return  false;

         while(isspace(*s))
            s++;

         if (*s ==  '+' || *s ==  '-')
            s++;

         bool eAppear =  false;
         bool dotAppear =  false;
         bool firstPart =  false;
         bool secondPart =  false;
         bool spaceAppear =  false;
         while(*s !=  '\0')
        {
             if (*s ==  '.')
            {
                 if (dotAppear || eAppear || spaceAppear)
                     return  false;
                 else
                    dotAppear =  true;
            }
             else  if (*s ==  'e' || *s ==  'E')
            {
                 if (eAppear || !firstPart || spaceAppear)
                     return  false;
                 else
                    eAppear =  true;
            }
             else  if (isdigit(*s))
            {
                 if (spaceAppear)
                     return  false;

                 if (!eAppear)
                    firstPart =  true;
                 else
                    secondPart =  true;
            }
             else  if (*s ==  '+' || *s ==  '-')
            {
                 if (spaceAppear)
                     return  false;

                 if (!eAppear || !(*(s -  1) ==  'e' || *(s -  1) ==  'E'))
                     return  false;
            }
             else  if (isspace(*s))
                spaceAppear =  true;
             else
                 return  false;

            s++;
        }

         if (!firstPart)
             return  false;
         else  if (eAppear && !secondPart)
             return  false;
         else
             return  true;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值