代码之家  ›  专栏  ›  技术社区  ›  NLed

使用isdigit()和isalpha()命令的最简单方法是什么?

  •  2
  • NLed  · 技术社区  · 14 年前

    我需要一个关于这两个命令 isdigit() isalpha() 工作。当然,在问这个问题之前,我先阅读了网上的资料,但我试过了,但没能让他们工作。最简单的使用方法是什么?

    我知道它会返回一个值,所以我假设我可以这样使用它:

    if(isdigit(someinput)==1)
     return -1;
    

    对吗?我能把这个用在任何类型的角色上吗?我能把它和浮点数或数组比较吗?

    假设,我想扫描一个包含数字和字母的文本文件,并确定要扫描的内容。这两个命令可以在这个上下文中使用吗?

    3 回复  |  直到 8 年前
        1
  •  1
  •   danben    14 年前

    它们不是“命令”,而是功能。函数接受参数并返回值。

    #include <ctype.h>
    int isdigit( int ch );
    

    这是 isdigit 功能:表示接受 int 价值 int ,像一个 char ,并将返回 int . 因此,不能向它传递数组(尽管可以对 int[] )

    的签名 isalpha 是相同的(显然除了名字)。

    文件说明如下:

    描述:函数isalpha()。 如果其参数为 字母表中的字母。否则, 返回零。

    这意味着您的比较对于所有实现都不正确。最好这样做:

    if (isdigit(someinput)) {
     return -1;
    }
    

    在C中,0的计算结果为 false 在布尔表达式中,所有非零值的计算结果为 true . 因此,此检查将涵盖 等号 返回-1,5,随便什么。

    如果要将这些应用于文本文件中的值,则必须一次读取一个字符的文本,并将收到的字符传递给这些方法。

        2
  •  2
  •   Jerry Coffin    14 年前

    你做 通常要比较返回值,只需将其视为布尔值:

    if (isalpha(someinput))
        do_whatever();
    

    如果你坚持做一个比较,它需要 !=0 但这完全是多余的,毫无意义。

    你用它 文字 从输入中读取的,而不是(此时)浮点数或任何东西,只是一组字符。在浮点数的情况下,其中一些将是数字,但许多还将包括小数点(不是数字),并且可能偶尔 e , + - 也。

    还要注意,通常需要将输入强制转换为 unsigned char 在呼叫任何 is* 功能。许多字符集在被视为 signed char ,向其中任何一个传递负值都会给出未定义的行为。

        3
  •  0
  •   LukeN    14 年前

    你可以用它做任何 烧焦 类型!(实际上是int,我不知道这是出于兼容的原因还是其他原因,但最常见的用法是字符)

    它将确定例如“5”是数字还是字母数字(字母表的一部分)。是的,如果 someInput 属于“char”类型