Validate if a given string is numeric.
Some examples:
"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => trueNote: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
T:
The part before "e" should only contain numbers or "." with at least one number.
The part after "e" should only contain numbers. The "+"/"-" is an exception.
A:
class Solution {
public:
bool isNumber(const char *s) {
while(*s == ' ') {
s++;
}
if(*s == '\0') {
return false;
}
if(*s == '-' || *s == '+') {
s++;
}
int dotseen = 0;
int eseen = 0;
int numseen = 0;
while(*s != '\0') {
if(*s >= '0' && *s <= '9') {
if(numseen == 0) {
numseen = 1;
}
} else if(*s == '.') {
if(!eseen && !dotseen) {
dotseen = 1;
if(!numseen && !(*(s+1) >= '0' && *(s+1) <= '9')) {
return false;
}
} else {
return false;
}
} else if(*s == 'e') {
if(numseen && !eseen){
eseen = 1;
if(!(*(s+1) >= '0' && *(s+1) <= '9') && !(*(s+1) == '-' || *(s+1) == '+')) {
return false;
}
} else {
return false;
}
} else if(*s == '-' || *s == '+') {
if(!(eseen && *(s-1) == 'e')) {
return false;
}
if(!(*(s+1) >= '0' && *(s+1) <= '9')) {
return false;
}
} else if(*s == ' ') {
do {
s++;
} while(*s == ' ');
if(*s != '\0') {
return false;
} else {
continue;
}
} else {
return false;
}
s++;
}
return true;
}
};
No comments:
Post a Comment