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,如果为‘’则为真,否则为假
 1 class Solution {
 2 public:
 3     void scanDights(char **string)
 4     {
 5         while(**string !='' && **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 == '')
16             return false;
17         scanDights(string);
18         return (**string == '') ? 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 == '')
27             return false;
28         bool numeric = true;
29         scanDights(&string);
30         if(*string != '')
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 == '';
52     }
53 };
原文地址:https://www.cnblogs.com/qqky/p/7095173.html