题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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 };
时间: 2024-10-12 13:06:39