C语言isalnum函数如何判断字母数字?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 C语言 正文

什么是 isalnum

isalnum 是 C 标准库中的一个函数,它的名字是 "is alphanumeric" 的缩写,意思是“是字母或数字吗?”。

c语言 isalnum
(图片来源网络,侵删)

它的主要作用是:检查一个给定的字符是否是字母(A-Z, a-z)或者数字(0-9)

  • 如果字符是字母或数字,函数返回非零值(通常是整数 1)。
  • 如果字符不是字母或数字(比如空格、标点符号、控制字符等),函数返回 0

函数原型

isalnum 函数在头文件 <ctype.h> 中声明。

#include <ctype.h>
int isalnum(int c);

参数说明:

  • c:要检查的字符,它被定义为 int 类型,但通常我们传入一个 char 类型的值,当传入 char 时,它会自动被提升为 int

返回值

  • 非零值 (True)c 是一个字母(A-Z, a-z)或一个数字(0-9)。
  • 零 (False)c 不是字母或数字。

使用示例

下面是一个简单的 C 程序,演示了 isalnum 的用法。

c语言 isalnum
(图片来源网络,侵删)
#include <stdio.h>
#include <ctype.h> // 必须包含这个头文件
int main() {
    char ch1 = 'A';
    char ch2 = 'z';
    char ch3 = '5';
    char ch4 = ' ';
    char ch5 = '@';
    // 检查 ch1
    if (isalnum(ch1)) {
        printf("'%c' 是一个字母或数字,\n", ch1);
    } else {
        printf("'%c' 不是一个字母或数字,\n", ch1);
    }
    // 检查 ch2
    if (isalnum(ch2)) {
        printf("'%c' 是一个字母或数字,\n", ch2);
    } else {
        printf("'%c' 不是一个字母或数字,\n", ch2);
    }
    // 检查 ch3
    if (isalnum(ch3)) {
        printf("'%c' 是一个字母或数字,\n", ch3);
    } else {
        printf("'%c' 不是一个字母或数字,\n", ch3);
    }
    // 检查 ch4
    if (isalnum(ch4)) {
        printf("'%c' 是一个字母或数字,\n", ch4);
    } else {
        printf("'%c' 不是一个字母或数字,\n", ch4);
    }
    // 检查 ch5
    if (isalnum(ch5)) {
        printf("'%c' 是一个字母或数字,\n", ch5);
    } else {
        printf("'%c' 不是一个字母或数字,\n", ch5);
    }
    return 0;
}

程序输出:

'A' 是一个字母或数字。
'z' 是一个字母或数字。
'5' 是一个字母或数字。
' ' 不是一个字母或数字。
'@' 不是一个字母或数字。

实际应用场景

isalnum 在处理字符串时非常有用,一个常见的例子是过滤字符串,比如移除所有非字母数字的字符。

示例:过滤字符串,只保留字母和数字

#include <stdio.h>
#include <ctype.h>
#include <string.h>
// 函数:过滤字符串,只保留字母和数字
void filter_string(char *str) {
    int i, j = 0;
    for (i = 0; str[i] != '\0'; i++) {
        // 如果当前字符是字母或数字
        if (isalnum(str[i])) {
            // 就把它保留下来
            str[j] = str[i];
            j++;
        }
    }
    // 在新字符串的末尾添加字符串结束符
    str[j] = '\0';
}
int main() {
    char my_string[] = "Hello, World! 123";
    printf("原始字符串: \"%s\"\n", my_string);
    filter_string(my_string);
    printf("过滤后字符串: \"%s\"\n", my_string);
    return 0;
}

程序输出:

c语言 isalnum
(图片来源网络,侵删)
原始字符串: "Hello, World! 123"
过滤后字符串: "HelloWorld123"

相关函数

isalnum 属于 C 语言的字符分类函数家族,这些函数都在 <ctype.h> 中声明,用于对字符进行分类。

函数 功能
isalpha(c) 是否是字母 A-Z, a-z
isdigit(c) 是否是数字 0-9
isalnum(c) 是否是字母或数字 isalpha(c) \|\| isdigit(c)
islower(c) 是否是小写字母 a-z
isupper(c) 是否是大写字母 A-Z
isspace(c) 是否是空白字符 空格 ' ', 制表符 '\t', 换行 '\n' 等
ispunct(c) 是否是标点符号 , . ! ? " ' 等
isxdigit(c) 是否是十六进制数字 0-9, A-F, a-f
isprint(c) 是否是可打印字符 包括字母、数字、标点等(不包括控制字符如 '\n')
iscntrl(c) 是否是控制字符 ASCII 码 0x00 到 0x1F 和 0x7F

重要注意事项

  1. 包含头文件:必须包含 #include <ctype.h>,否则编译器会找不到 isalnum 的声明。
  2. 参数是 int:虽然你通常传一个 char 过去,但函数原型要求是 int,这是因为这些函数在底层实现时,通常通过检查字符的 ASCII 值范围来判断,而 int 类型可以更方便地处理所有字符值(包括 EOF,即 -1)。
  3. 可移植性isalnum 的行为依赖于当前系统的字符集编码(如 ASCII, EBCDIC),在绝大多数现代系统和平台上,它都遵循 ASCII 标准,但对于一些特殊或老旧的系统,行为可能略有不同,在 99% 的情况下,你都可以放心使用它来处理 A-Z, a-z, 0-9。
-- 展开阅读全文 --
头像
dede如何调用用户浏览历史记录?
« 上一篇 04-13
strcount函数如何实现字符串字符计数?
下一篇 » 04-14

相关文章

取消
微信二维码
支付宝二维码

目录[+]