题目:
实现一个函数用来判断字符串是否表示数值(包括整数和小数以及使用科学计数法表示的数)。
分析:
可能出现以下情况:
- 123
- +123、-123
- 123e10
- 123.5e10
- ……
使用通配符表示为:
d[.[d]][e|Ed]
其中d为整数,[]表示出现0到任意次,|表示出现前后的字母都可以
代码:
#include <iostream>
bool scanUnsignInt(char** str) {
char* tmp = *str;
while (**str != '\0' && **str >= '0' && **str <= '9') {
(*str)++;
}
return tmp!=*str;
}
bool scanInt(char** str) {
if (**str == '+' || **str == '-')
(*str)++;
return scanUnsignInt(str);
}
bool isNumeric(char* str) {
if (!str) return false;
bool preNum = scanInt(&str); //扫描第一个d
if (*str == '.') { //扫描 [.[d]]
str++;
preNum = preNum || scanUnsignInt(&str); //处理 “.123”这类小数
}
if (*str == 'e' || *str == 'E') { //处理[e|Ed]部分
str++;
preNum = preNum && scanInt(&str); //e后可跟带符号的数
}
return (*str == '\0') && preNum;
}
int main()
{
char* str = (char*)"123.e10";
std::cout << scanUnsignInt(&str);
int a;
}