劍指offer:表示數值的字串
阿新 • • 發佈:2019-02-10
題目描述
請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示數值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
class Solution {
public:
bool isNumeric(char* string)
{
if (string == NULL){
return false;
}
if (*string == '+' || *string == '-' ){
string++;
}
if (*string == '\0'){
return false;
}
scanDigits(&string);
bool numeric = true;
if (*string != '\0'){
if (*string == '.'){
string++;
scanDigits(&string);
if (*string == 'e' || *string == 'E'){
numeric = isExponential(&string);
}
}
else{
if (*string == 'e' || *string == 'E'){
numeric = isExponential(&string);
}
}
}
return numeric && *string == '\0';
}
private:
void scanDigits(char **string){
while (**string != '\0'&&**string >= '0'&&**string <= '9'){
(*string)++;
}
}
bool isExponential(char **string){
if (**string != 'e' && **string != 'E'){
return false;
}
(*string)++;
if (**string == '+' || **string == '-'){
(*string)++;
}
if (**string == '\0'){
return false;
}
scanDigits(string);
return **string == '\0' ? true : false;
}
};