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

时间:2015-01-10 18:09:26

标签: c string

我想了解如何验证字符串输入并检查输入的字符串是否为数字?我相信isdigit()函数是正确的方法,但我可以尝试使用一个字符串,但是当它涉及一个字符串时,该功能并没有帮助我。这就是我所拥有的到目前为止,请指导我验证一个完整的字符串,如

char * Var1 =" 12345"和char * var2 =" abcd"

#include <stdio.h>
#include <ctype.h>

int main()
{
   char *var1 = "hello";
   char *var2 = "12345";

   if( isdigit(var1) )
   {
      printf("var1 = |%s| is a digit\n", var1 );
   }
   else
   {
      printf("var1 = |%s| is not a digit\n", var1 );
   }
   if( isdigit(var2) )
   {
      printf("var2 = |%s| is a digit\n", var2 );
   }
   else
   {
      printf("var2 = |%s| is not a digit\n", var2 );
   }

   return(0);
}

当声明和初始化变量时,程序似乎工作正常,

int var1 =&#39; h&#39 ;; int var2 =&#39; 2&#39 ;;

但我想了解如何验证完整的字符串,如* var =&#34; 12345&#34 ;;

3 个答案:

答案 0 :(得分:1)

尝试在每个字符串上创建一个循环并单独验证每个char

答案 1 :(得分:1)

isdigit需要一个char,而不是char*。如果要使用isdigit,请添加循环以进行检查。由于您计划在多个地方使用它,因此将其转换为函数,如下所示:

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

当到达字符串的null终结符而没有在中间点击return语句时,换句话说,当所有字符都通过isdigit测试时,上面的循环将结束。

请注意,传递all_digits 意味着该字符串表示任何支持的数字类型的值,因为不考虑字符串的长度。因此,all_digits会返回一长串数字,但如果您尝试将其转换为intlong long,则会出现溢出。

答案 2 :(得分:0)

使用此

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

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

然后

if (isNumeric(var1) == 0)
    printf("%s is NOT a number\n", var1);
else
    printf("%s is number\n", var1);

strtol()函数将忽略前导空格字符。

如果找到无法转换的字符,转换将停止,并且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');
}

取决于你需要什么,但跳过领先的空白字符就是将数字解释为人类正在阅读它们,因为人类&#34;不会看到&#34; 空白字符。