我试图找到一种方法来检查读入式字符*是否可以表示为数字(带或不带小数位)。基本上我问,如果我有一个包含以下内容的文本文件:
-1.9e-3
e9
1e9
1ee9
-1-.9e3
.9e3
.9.e3
能够识别第1行,第3行和第6行可以"枚举"到有效数字,而所有其他行包含错误输入。我知道这可以通过蛮力来完成,但可能存在无限多种可能错误的可能性。如果有一个函数读取整个char *并且可以说,"是的,那么字符串可以表示为实际数字"或"不能将该字符串转换为它想要的数字。"
通过枚举,我的意思是字符串(char *)
可以是它希望代表的数字。
答案 0 :(得分:1)
只需使用strtold()
,它会告诉您它是否成功,并且还会为您提供转换后的数字。
答案 1 :(得分:0)
尝试使用strtold()
转换它并使用可能性来检查错误,例如
char *x = "-1.9e-3";
errno = 0;
char *endptr;
long double xnum = strtold(x, &endptr);
if (*endptr) // (&& *endptr != '\n' if you read with `fgets()`)
{
// extra / invalid characters;
}
else if (errno == ERANGE)
{
// out of range;
}