c - 检查是否可以枚举字符串(字符 *)



我正在尝试找到一种方法来检查读入字符*是否可以表示为数字(带或不带小数位(。 本质上,我是在问,如果我有一个包含以下内容的文本文件:

-1.9e-3
e9
1e9
1ee9
-1-.9e3
.9e3
.9.e3

它将能够识别第 1 行、第 3 行和第 6 行可以"枚举"为有效数字,而所有其他行都包含错误的输入。 我知道这可以通过蛮力完成,但可能有无限种可能性可能是错误的。 如果有一个函数读取整个 char * 并且可以说,"是的,该字符串可以表示为实际数字"或"不,该字符串不能转换为它想要的数字",那会容易得多。

通过枚举,我的意思是字符串(char *)可以是它希望表示的数字。

只需使用 strtold() ,它会告诉您是否成功,并为您提供转换后的数字。

只需尝试使用 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;
}

最新更新