如何检查字符串是否为数字?

Ast*_*nog 16 c string

我想检查字符串是否是带有此代码的数字.我必须检查字符串中的所有字符都是整数,但while返回的总是isDigit = 1.我不知道为什么如果不起作用.

char tmp[16];
scanf("%s", tmp);

int isDigit = 0;
int j=0;
while(j<strlen(tmp) && isDigit == 0){
  if(tmp[j] > 57 && tmp[j] < 48)
    isDigit = 0;
  else
    isDigit = 1;
  j++;
}
Run Code Online (Sandbox Code Playgroud)

zou*_*oul 33

忘记ASCII代码检查,使用isdigitisnumber(参见参考资料man isnumber).第一个函数检查字符是否为0-9,第二个函数还接受各种其他数字字符,具体取决于当前的语言环境.

甚至可能有更好的功能来进行检查 - 重要的一点是,这比看起来要复杂一些,因为"数字字符串"的精确定义取决于特定的语言环境和字符串编码.

  • `isdigit` 和 `isnumber` 是非常好的函数。但是,如果您想确切地了解如何区分数字和其他字符,它们真的很糟糕。学习函数的基础知识,或更确切地说,函数的工作原理,比学习如何使用函数更重要。对我来说,这个答案是正确的,但从长远来看对 OP 没有任何帮助。他仍然不知道如何区分缺少“isdigit”和“isnumber”的其他语言中的数字。只有我的 2 美分。 (3认同)

Aru*_*run 8

  if(tmp[j] >= '0' && tmp[j] <= '9') // should do the trick
Run Code Online (Sandbox Code Playgroud)


Den*_*.R. 7

更明显和简单的线程安全示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc < 2){
        printf ("Dont' forget to pass arguments!\n");
        return(-1);
    }

    printf ("You have executed the program : %s\n", argv[0]);

    for(int i = 1; i < argc; i++){
        if(strcmp(argv[i],"--some_definite_parameter") == 0){
            printf("You have passed some definite parameter as an argument. And it is \"%s\".\n",argv[i]);
        }
        else if(strspn(argv[i], "0123456789") == strlen(argv[i])) {
            size_t big_digit = 0;
            sscanf(argv[i], "%zu%*c",&big_digit);
            printf("Your %d'nd argument contains only digits, and it is a number \"%zu\".\n",i,big_digit);
        }
        else if(strspn(argv[i], "0123456789abcdefghijklmnopqrstuvwxyz./") == strlen(argv[i]))
        {
            printf("%s - this string might contain digits, small letters and path symbols. It could be used for passing a file name or a path, for example.\n",argv[i]);
        }
        else if(strspn(argv[i], "ABCDEFGHIJKLMNOPQRSTUVWXYZ") == strlen(argv[i]))
        {
            printf("The string \"%s\" contains only capital letters.\n",argv[i]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)