C isalnum() 函数

C isalnum() 语法

isalnum() 是 C 语言 <ctype.h> 标准库的一个函数,用于测试一个字符是否为字母或数字。

其中,字母数字字符包括以下 2 种:

  • 英文字母(包含大小写):'a'~'z'、'A'~'Z'。
  • 十进制数字:'0'~'9'。

语法:

isalnum(c)

说明:

isalnum() 函数接收单个参数。

  • c(int):是一个字符。虽然参数是 int 类型,但它通常表示一个 unsigned char 的值,或者 EOF。

isalnum() 函数会返回一个整数,以表示测试结果。

  • 如果 c 是一个字母或数字,则返回一个 “非零值(真)” 。
  • 如果 c 不是字母或数字,则返回 “0(假)” 。

提示:

  • isalnum 是 “is alphanumeric” 的缩写。
  • isalnum() 的功能相当于同时使用 isalpha()isdigit()

C isalnum() 摘要

使用频率
修改字符串
官方文档 查看

C isalnum() 示例

接下来,我们通过几个简单的例子来讲解一下 C isalnum() 函数是如何使用的。

示例 1:isalnum() 判断字母和数字

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

int main(void)
{
    char ch1 = 'y';
    char ch2 = 'E';
    char ch3 = '6';

    if (isalnum(ch1)) {
        printf("'%c' 是字母数字字符。\n", ch1);
    } else {
        printf("'%c' 不是字母数字字符。\n", ch1);
    }

    if (isalnum(ch2)) {
        printf("'%c' 是字母数字字符。\n", ch2);
    } else {
        printf("'%c' 不是字母数字字符。\n", ch2);
    }

    if (isalnum(ch3)) {
        printf("'%c' 是字母数字字符。\n", ch3);
    } else {
        printf("'%c' 不是字母数字字符。\n", ch3);
    }

    return 0;
}

运行结果如下。

'y' 是字母数字字符。
'E' 是字母数字字符。
'6' 是字母数字字符。

分析:

如果参数是字母(大小写)和数字字符,isalnum() 会返回非零值(真)。

示例 2:isalnum() 判断非字母数字字符

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

int main(void)
{
    char ch1 = '$';
    char ch2 = ' ';       // 空格
    char ch3 = '\n';      // 换行符(控制符)

    if (isalnum(ch1)) {
        printf("'%c' 是字母数字字符。\n", ch1);
    } else {
        printf("'%c' 不是字母数字字符。\n", ch1);
    }

    if (isalnum(ch2)) {
        printf("'%c' (空格) 是字母数字字符。\n", ch2);
    } else {
        printf("'%c' (空格) 不是字母数字字符。\n", ch2);
    }

    if (isalnum(ch3)) {
        printf("'\\n' (换行符) 是字母数字字符。\n");
    } else {
        printf("'\\n' (换行符) 不是字母数字字符。\n", ch3);
    }

    return 0;
}

运行结果如下。

'$' 不是字母数字字符。
' ' (空格) 不是字母数字字符。
'\n' (换行符) 不是字母数字字符。

分析:

如果参数是标点符号、空格和控制字符等非字母数字字符,则 isalnum() 会返回 0(假)。

示例 3:isalnum() 验证字符串是否只包含字母数字字符

#include <stdio.h>
#include <ctype.h>      // 包含 isalnum() 函数
#include <string.h>     // 包含 strlen() 函数

int main(void)
{
    char str[] = "HelloLvye123";
    int result = 1;

    // 循环判断每一个字符
    for (int i = 0; str[i] != '\0'; i++) {
        if (!isalnum((unsigned char)str[i])) {
            result = 0;
            break;
        }
    }

    // 打印结果
    if (result) {
        printf("字符串只包含字母数字字符\n");
    } else {
        printf("字符串包含非字母数字字符\n");
    }

    return 0;
}

运行结果如下。

字符串只包含字母数字字符

分析:

在这个例子中,我们使用for循环 遍历字符串的每一个字符。首先,我们假设字符串是合法的(result = 1)。然后在循环中,我们使用 !isalnum() 来判断当前字符串是否不是 “字母数字字符”。一旦发现非字母数字字符,就将 result 设置为 0(表示不合法),并使用 break 语句 中断循环。

示例 4:isalnum() 处理 EOF

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

int main(void)
{
    int result;

    result = isalnum(EOF);
    printf("%d\n", result);

    return 0;
}

运行结果如下。

0

分析:

如果 isalnum() 的参数是 EOF,那么它会返回 0。

深入了解 isalnum()

isalnum() 函数的行为受到当前区域设置 (locale) 的影响。在默认的 "C" 区域设置下,它只会将 'a' ~ 'z'、'A' ~ 'Z'、'0' ~ '9' 等识别为字母数字字符。而在其他区域设置下,它可能会根据该区域设置的定义将其他字符也视作字母数字字符。

从定义上看,isalnum(c) 等价于 (isalpha(c) || isdigit(c))。也就是如果 isalpha(c) 或 isdigit(c) 任一为真,则 isalnum(c) 为真。

需要注意的是,虽然 isalnum() 的参数 c 写的是 int 类型,但我们必须传入一个字符(比如 'a'、'B' 等),或者输入特殊的 EOF 值(常用于文件结束判断)。如果传入一个负数(除了 EOF),则可能会导致未定义行为。

上一篇: isdigit()

下一篇: isxdigit()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号