题目描述
1 class Solution { 2 private: 3 bool scanUnsignedInteger(char* &str) { 4 char* before = str; 5 while (*str != '\0' && *str >= '0' && *str <= '9') { 6 str++; 7 } 8 return str > before; 9 } 10 bool scanInteger(char* &str) { 11 if (*str == '+' || *str == '-') { 12 str++; 13 } 14 return scanUnsignedInteger(str); 15 } 16 public: 17 bool isNumeric(char* string) 18 { 19 if (string == nullptr) { 20 return false; 21 } 22 bool numeric = scanInteger(string); 23 // 如果出现'.',则接下来是数字的小数部分 24 if (*string == '.') { 25 string++; 26 // 下面一行用||的原因: 27 // 1.小数可以没有整数部分, 如.123等于0.123 28 // 2.小数点后面可以没有数字,如233.等于233.0 29 // 3.小数点前面和后面都可以有数字,如233.666 30 numeric = scanUnsignedInteger(string) || numeric; //只有当小数点前后都没有数字的时候,numeric = false; 31 } 32 if (*string == 'e' || *string == 'E') { 33 string++; 34 // 用&&的原因: 35 // 1.当e或者E前面没有数字的时候,整个字符串不能表示数字,如.e1, e1; 36 // 2.当e或者E后面没有整数的时候,整个字符串不能表示数字,如12e、12e+5.4 37 numeric = numeric && scanInteger(string); 38 } 39 return numeric && *string == '\0'; 40 } 41 };