题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)
思路:
表示数值的字符串遵循模式A[.[B]][E\eC]或者.B[E\eC],判断一个字符是否符合上述模式时,首先尽可能多地扫描0-9的数字,,也就是前面字符串模式的A部分,如果遇到小数点,则开始扫描表示数值小数B部分。如果遇到E或者e则开始扫描C部分。
代码实现:
bool isNumber(char* s) {
int len = strlen(s);
bool hasNum = false, hasE = false, hasSign = false, hasDot = false;
int index = 0;
while (index < len && s[index] == ' ') {
index++;
}
while (index < len) {
while (index < len && s[index] >= '0' && s[index] <= '9') {
index++;
hasNum = true;
}
if (index == len) {
break;
}
char c = s[index];
if (c == 'e' || c == 'E') {
if (hasE || !hasNum) {
return false;
}
hasE = true;
hasDot = hasNum = hasSign = false;
} else if (c == '+' || c == '-') {
if (hasSign || hasNum || hasDot) {
return false;
}
hasSign = true;
} else if (c == '.') {
if (hasDot || hasE) {
return false;;
}
hasDot = true;
} else if (c == ' ') {
break;
} else {
return false;
}
index++;
}
while (index < len && s[index] == ' ') {
index++;
}
return hasNum && index == len;
}