首页 > 代码库 > 53、剑指offer--表示数值的字符串

53、剑指offer--表示数值的字符串

题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
 
解题思路:
1)先判断第一位是不是符号位,是符号位后移一位
2)扫描0-9的数字位,后移一位
3)判断是否遇到‘.’,如果是,跳过小数点,继续扫描0-9  如果遇到‘e’或‘E‘判断是否符合科学计数法规则
4)不是小数,遇到‘e’或‘E‘判断是否符合科学计数法规则
5)否则,返回false
判断是否符合科学计数法规则:移到e或E的下一位,判断符号,扫描0-9,如果为‘\0’则为真,否则为假
 1 class Solution {
 2 public:
 3     void scanDights(char **string)
 4     {
 5         while(**string !=\0 && **string >= 0 && **string <= 9)
 6             ++(*string);
 7     }
 8     bool isExponential(char **string)
 9     {
10         if(**string != e && **string != E)//注意此处是&&
11             return false;
12         ++(*string);
13         if(**string == + || **string == -)
14             ++(*string);
15         if(**string == \0)
16             return false;
17         scanDights(string);
18         return (**string == \0) ? true: false;
19     }
20     bool isNumeric(char* string)
21     {
22         if(string == NULL)
23             return false;
24         if(*string == + || *string == -)
25             string++;
26         if(*string == \0)
27             return false;
28         bool numeric = true;
29         scanDights(&string);
30         if(*string != \0)
31         {
32             //浮点型处理
33             if(*string == .)
34             {
35                 ++string;
36                 scanDights(&string);
37                 //科学计数法处理
38                 if(*string == e || *string == E)
39                 {
40                     numeric = isExponential(&string);
41                 }
42             }
43             //不是浮点型
44             else if(*string == e || *string == E)
45             {
46                 numeric = isExponential(&string);
47             }
48             else
49                 numeric = false;
50         }
51         return numeric && *string == \0;
52     }
53 };

 

53、剑指offer--表示数值的字符串