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

(图片来源网络,侵删)
它的主要作用是:检查一个给定的字符是否是字母(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 的用法。

(图片来源网络,侵删)
#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;
}
程序输出:

(图片来源网络,侵删)
原始字符串: "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 |
重要注意事项
- 包含头文件:必须包含
#include <ctype.h>,否则编译器会找不到isalnum的声明。 - 参数是
int:虽然你通常传一个char过去,但函数原型要求是int,这是因为这些函数在底层实现时,通常通过检查字符的 ASCII 值范围来判断,而int类型可以更方便地处理所有字符值(包括EOF,即 -1)。 - 可移植性:
isalnum的行为依赖于当前系统的字符集编码(如 ASCII, EBCDIC),在绝大多数现代系统和平台上,它都遵循 ASCII 标准,但对于一些特殊或老旧的系统,行为可能略有不同,在 99% 的情况下,你都可以放心使用它来处理 A-Z, a-z, 0-9。
