面试题54——表示数值的字符串
题目描写叙述
请实现一个函数用来推断字符串是否表示数值(包含整数和小数)。比如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 可是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
解题思路:
这道题没什么别的技巧,依照数值的表示规则,逐个扫描字符串,看是否符合要求。
数值有例如以下几种情况:
1、正负数,首位能够有‘+’ 和 ‘-’ 符号;
2、小数
3、科学计数法,符号‘e’ 或 ‘E’ 。注意 e 或 E 之后仅仅能是整数(能够有正负数)
实现细节见代码
实现代码:
<span style="font-size:18px;"> class Solution { public: bool isNumeric(char* string) { if(string == nullptr) return false; if(*string == '+' || *string == '-') string++; if(*string == '\0') return false; bool isNum = true; scanDigits(&string); if(*string != '\0') { if(*string == '.') { ++string; scanDigits(&string); if(*string == 'e' || *string == 'E') isNum = isExp(&string); } else if(*string == 'e' || *string == 'E') isNum = isExp(&string); else isNum = false; } return isNum && (*string == '\0'); } void scanDigits(char **str) { while(**str != '\0' && **str >= '0' && **str <= '9') ++(*str); } bool isExp(char **str) { if(**str != 'e' && **str != 'E') return false; ++(*str); if(**str == '+' || **str == '-') ++(*str); if(**str == '\0') return false; scanDigits(str); return (**str == '\0') ?true : false; } }; </span>