C 如何检查特定字符串是否为字符值的数值?

C 如何检查特定字符串是否为字符值的数值?,c,string,C,String,我想了解如何验证字符串输入并检查输入的字符串是否为数字?我相信isdigit()函数是正确的方法,但我可以用一个字符来尝试,但当涉及到字符串时,该函数对我没有帮助。这是我迄今为止得到的结果,有人能指导我验证完整的字符串吗 char*Var1=“12345”和char*var2=“abcd” #包括 #包括 int main() { char*var1=“你好”; char*var2=“12345”; if(isdigit(var1)) { printf(“var1=|%s|是一个数字\n”,va

我想了解如何验证字符串输入并检查输入的字符串是否为数字?我相信isdigit()函数是正确的方法,但我可以用一个字符来尝试,但当涉及到字符串时,该函数对我没有帮助。这是我迄今为止得到的结果,有人能指导我验证完整的字符串吗

char*Var1=“12345”和char*var2=“abcd”

#包括
#包括
int main()
{
char*var1=“你好”;
char*var2=“12345”;
if(isdigit(var1))
{
printf(“var1=|%s|是一个数字\n”,var1);
}
其他的
{
printf(“var1=|%s|不是数字\n”,var1);
}
if(isdigit(var2))
{
printf(“var2=|%s|是一个数字\n”,var2);
}
其他的
{
printf(“var2=|%s|不是数字\n”,var2);
}
返回(0);
}
当变量声明和初始化如下时,程序似乎工作正常

int var1='h'; int var2='2'

但我想了解如何验证像*var=“12345”这样的完整字符串

用这个

int isNumber(const char *const text)
{
    char *endptr;
    if (text == NULL)
        return 0;
    strtol(text, &endptr, 10);

    return (*endptr == '\0');
}
然后

该函数将忽略前导空格字符

如果找到无法转换的字符,转换将停止,
endptr
将在返回后指向该字符,因此检查
*endptr=='\0'
将告诉您是否在字符串末尾,这意味着所有成功转换的字符

如果你想把前面的空白当作无效字符,那么你可以直接写这个,而不是

int isNumber(const char *text)
{
    char *endptr;
    if (text == NULL)
        return 0;
    while ((*text != '\0') && (isspace(*text) != 0))
        text++;
    if (*text == '\0')
        return 0;
    strtol(text, &endptr, 10);

    return (*endptr == '\0');
}

根据您的需要,跳过前导空格字符是将数字解释为人类正在阅读,因为人类“看不到”空格字符。

尝试在每个字符串上循环,并单独验证每个字符。

isdigit
只接受一个
字符,而不是
字符*
。如果要使用
isdigit
,请添加一个循环来执行检查。由于您计划在多个地方使用它,请将其变成一个函数,如下所示:

int all_digits(const char* str) {
    while (*str) {
        if (!isdigit(*str++)) {
            return 0;
        }
    }
    return 1;
}

以上的循环将在字符串的空终止符到达,而不击中中间的<代码>返回语句时,换句话说,当所有字符都通过了<代码> ISDIGION/COD> Test.


请注意,传递所有数字并不意味着字符串代表任何支持的数字类型的值,因为不考虑字符串的长度。因此,一个很长的数字字符串对于
所有数字都将返回true,但如果您尝试将其转换为
int
long-long
,则会出现溢出。

请阅读
isdigit
的文档!它只适用于单个字符。(所以下一步应该是合乎逻辑的。)您需要迭代数组,对每个字符应用isdigit并检查返回值。
strtol
跳过前导空格,所以OP的问题是这是否允许。感谢大家分享代码片段并解释逻辑。我将首先理解逻辑并尝试一下,稍后让您知道结果:)这似乎是最简单的解决方案。谢谢大家:)
int isNumber(const char *text)
{
    char *endptr;
    if (text == NULL)
        return 0;
    while ((*text != '\0') && (isspace(*text) != 0))
        text++;
    if (*text == '\0')
        return 0;
    strtol(text, &endptr, 10);

    return (*endptr == '\0');
}
int all_digits(const char* str) {
    while (*str) {
        if (!isdigit(*str++)) {
            return 0;
        }
    }
    return 1;
}