题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:小数点或者前面有一个整型,或者后面有一个无符号整型,或者两者都有;e或E前面必须有一个整型或小数,后面必须有一个整型。
class Solution { public: bool scanUInt(char *string, int &idx)//匹配无符号整型 { int tmp=idx; while(string[idx]>=‘0‘ && string[idx]<=‘9‘)++idx; return idx>tmp; } bool scanInt(char *string, int &idx)//匹配带符号(+或-)的整型 { if(string[idx]==‘+‘ || string[idx]==‘-‘)++idx; return scanUInt(string, idx); } bool isNumeric(char* string) { if(string==NULL)return false; int idx=0; bool res=scanInt(string, idx); if(string[idx]==‘.‘) { ++idx; res=scanUInt(string, idx) || res;//小心短路运算 } if(string[idx]==‘e‘ || string[idx]==‘E‘) { ++idx; res=scanInt(string, idx) && res; } return res && string[idx]==‘\0‘; } };