剑指offer系列42:表示数值的字符串

这个题难度并不大,主要考虑几个方面:

1.正负号位,只能出现一次,只能出现在数字的前面

2.小数点位,只能出现一次,必须出现在数字的终点

3.指数为e或E,可以出现在数字之前或者数字之后

4.称为数字的必要条件是必须包含数字(e和E算不算数组根据题目而定,此时假定不算)

 1 class Solution {
 2 public:
 3     bool isNumeric(char* str)
 4     {
 5         if (str == NULL || str[0] == '')
 6             return false;
 7         int sig = 0;//判断符号位的个数
 8         int num = 0;//数字的个数
 9         int point = 0;//小数点个数
10 
11         //先判断空格,跳过空格
12         while (*str == ' ')
13             str++;
14 
15         //判断符号位
16         while (*str == '+' || *str == '-')
17         {
18             sig++;
19             str++;
20             if (sig > 1)
21             {
22                 return false;
23             }
24         }
25         //判断数字的个数
26 
27         while (*str >= '0' && *str <= '9')
28         {
29             num++;
30             str++;
31         }
32         while (*str == '.')//本来我是这样写的,结果那个奇怪的测试用例无法通过,看最下面
33                            //while (num&&*str == '.')
34                            //小数点前面必须有数字才是数字这不是很简单的道理吗
35         {
36             point++;
37             str++;
38             if (sig > 1)
39             {
40                 return false;
41             }
42         }
43         while (*str >= '0' && *str <= '9')
44         {
45             num++;
46             str++;
47         }
48         if (*str == 'e' || *str == 'E')
49         {
50             str++;
51             {
52                 sig = 0;
53                 while (*str == '+' || *str == '-')
54                 {
55                     sig++;
56                     str++;
57                     if (sig > 1)
58                     {
59                         return false;
60                     }
61                 }
62                 //判断数字的个数
63                 num = 0;
64                 while (*str >= '0' && *str <= '9')
65                 {
66                     num++;
67                     str++;
68                 }
69                 if (num == 0)//e的后面必须有数字
70                     return false;
71                 if (*str == '')
72                     return true;
73                 else
74                 {
75                     return false;
76                 }
77             }
78         }
79         else
80             if (*str == ''&&num)                                                     //必须有数字才是数字
81                 return true;
82             else
83             {
84                 return false;
85             }
86         
87     }
88 
89 };

有一个测试用例是“-.123”,样例输出竟然是true?

这算是数字吗,牛客网到底是怎么想的,小数点的前面没有数字也可以吗?

原文地址:https://www.cnblogs.com/neverland0718/p/11242332.html