- 题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- 对小数点和e进行标记,逐字符匹配
class Solution { public: bool isNumeric(char* string) { if(string==NULL) return false; if(*string=='+'||*string=='-') string++; int xsdflag = 0, eflag = 0; while(*string!='\0') { if (*string>='0'&&*string<='9') string++; else if (*string=='.') { if (xsdflag == 1) return false; xsdflag = 1; string++; } else if (*string=='e'||*string=='E') { if (eflag == 1) return false; xsdflag = 1; eflag = 1; if (*(string+1) == '+'||*(string+1)== '-') string++; else if (*(string+1)=='\0') return false; string++; } else return false; } return true; } };
- 使用正则求解
#include<regex> class Solution { public: bool isNumeric(char* string) { std::string s = string; std::string pattern = "[+-]?[0-9]*(\\.[0-9]*)?([eE][+-]?[0-9]+)?"; std::regex rec(pattern); if (std::regex_match(s, rec)) return true; return false; } };