判断字符是数字还是字母

66

在C语言中,如何确定一个char类型的字符(如a或9)是数字还是字母?

最好使用以下哪种方式:

int a = Asc(theChar);

还是这个呢?

int a = (int)theChar
7个回答

122

您需要使用 <ctype.h>中的isalpha()isdigit()标准函数。

char c = 'a'; // or whatever

if (isalpha(c)) {
    puts("it's a letter");
} else if (isdigit(c)) {
    puts("it's a digit");
} else {
    puts("something else?");
}

38

字符实际上就是整数,因此您可以直接将字符与文字进行比较:

if( c >= '0' && c <= '9' ){

这适用于所有字符。 查看ASCII表

ctype.h还提供了函数来帮你完成这些操作。


3
这是正确的,但并不是因为ASCII有保证,而是由于数字的连续性:https://dev59.com/JGoy5IYBdhLWcg3wWss_#35936519 - Ciro Santilli OurBigBook.com
这就是我在寻找的答案。我认为大多数人在解决任何类型的大学练习时都需要这个答案。 - Henrique Amaral

14

<ctype.h> 包含一系列用于确定一个 char 是否代表字母或数字的函数,如 isalphaisdigitisalnum

int a = (int)theChar 不能实现你想要的功能,因为 a 只是简单地保存表示特定字符的整数值。例如,字符 '9' 的 ASCII 码是 57,而字符 'a' 的 ASCII 码是 97。

对于 ASCII:

  • 数字 - if (theChar >= '0' && theChar <= '9')
  • 字母 -
    if (theChar >= 'A' && theChar <= 'Z' || theChar >= 'a' && theChar <= 'z')

请查看ASCII 表格以自行确认。


2
对于所有符合标准(ASCII或非ASCII)的实现,“0”<=x<='9'的检查是正确的。C要求十进制数字具有连续表示。至于字母,则所有赌注都是随意的。 - Wiz

10

这两个函数都没有实际用途。请使用标准库中的isalpha()isdigit()函数,它们在<ctype.h>头文件中定义。


7
如果 (theChar >= '0' && theChar <='9'),那么它就是数字。你明白了吧。

6

您通常可以使用简单的条件来检查ASCII字母或数字

if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
    /*This is an alphabet*/
}

对于数字,您可以使用

if (ch >= '0' && ch <= '9')
{
    /*It is a digit*/
}

但是由于C语言中的字符在内部被视为 ASCII值,因此您也可以使用ASCII值来进行相同的检查。

如何检查一个字符是数字还是字母


正如每个中间 C 代码所提到的,不能保证 C 使用 ASCII,因此这种方法并不“适用于所有情况”。 - Ankur S

3

C99标准中的c >= '0' && c <= '9'

c >= '0' && c <= '9'(在另一个答案中提到)之所以有效,是因为C99 N1256标准草案 5.2.1“字符集”中指出:

在源代码和执行基本字符集中,上述十进制数字列表中每个字符的值都比前一个大1。

但是,不能保证ASCII。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接