- 題目
請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。 例如,字符串"+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; } };