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

时间:2017-11-14 14:37:44

标签: c char decimal

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

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

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

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

2 个答案:

答案 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;
}