文章目录
- 🌠 C语言字符判断函数:从`isalnum`到`isascii_l`
-
- 基础字符判断函数(无本地化版本)
-
- 1. `int isalnum(int c);`:判断是否为字母或数字
- 2. `int isalpha(int c);`:判断是否为字母
- 3. `int iscntrl(int c);`:判断是否为控制字符
- 4. `int isdigit(int c);`:判断是否为十进制数字
- 5. `int isgraph(int c);`:判断是否为可打印非空格字符
- 6. `int islower(int c);`:判断是否为小写字母
- 7. `int isprint(int c);`:判断是否为可打印字符(含空格)
- 8. `int ispunct(int c);`:判断是否为标点符号
- 9. `int isspace(int c);`:判断是否为空白字符
- 10. `int isupper(int c);`:判断是否为大写字母
- 11. `int isxdigit(int c);`:判断是否为十六进制数字
- 12. `int isascii(int c);`:判断是否为ASCII字符
- 13. `int isblank(int c);`:判断是否为空白符(空格或制表符)
- 本地化版本函数(带`_l`后缀)
- 🚩总结
🌠 C语言字符判断函数:从isalnum
到isascii_l
在C语言中,<ctype.h>
头文件提供了一系列用于字符分类和转换的函数,它们能帮我们快速判断一个字符是否属于特定类型(如字母、数字、空格等)。
序号 | 函数接口 | 功能说明 |
---|---|---|
1 | int isalnum(int c); |
判断是否为字母或数字 |
2 | int isalpha(int c); |
判断是否为字母 |
3 | int iscntrl(int c); |
判断是否为控制字符 |
4 | int isdigit(int c); |
判断是否为十进制数字 |
5 | int isgraph(int c); |
判断是否为可打印非空格字符 |
6 | int islower(int c); |
判断是否为小写字母 |
7 | int isprint(int c); |
判断是否为可打印字符(含空格) |
8 | int ispunct(int c); |
判断是否为标点符号 |
9 | int isspace(int c); |
判断是否为空白字符 |
10 | int isupper(int c); |
判断是否为大写字母 |
11 | int isxdigit(int c); |
判断是否为十六进制数字 |
12 | int isascii(int c); |
判断是否为 ASCII 字符 |
13 | int isblank(int c); |
判断是否为空白符(空格或制表符) |
基础字符判断函数(无本地化版本)
这些函数的参数均为int c
,需注意:
- 实际传入的是字符的ASCII值(通常用
char
强制转换为int
) - 若参数是
EOF
(通常为-1),所有函数均返回0 - 返回值:非0(真)表示符合条件,0(假)表示不符合
1. int isalnum(int c);
:判断是否为字母或数字
功能:检查字符是否是字母(a-z, A-Z)或数字(0-9)。
示例:
#include <ctype.h>
#include <stdio.h>
int main() {
char c1 = 'A', c2 = '5', c3 = '#';
printf("%d\n", isalnum(c1)); // 非0(真,'A'是字母)
printf("%d\n", isalnum(c2)); // 非0(真,'5'是数字)
printf("%d\n", isalnum(c3)); // 0(假,'#'既非字母也非数字)
return 0;
}
2. int isalpha(int c);
:判断是否为字母
功能:检查字符是否是字母(a-z, A-Z)。
示例:
char c1 = 'b', c2 = 'B', c3 = '3';
printf("%d\n", isalpha(c1)); // 非0(真,小写字母)
printf("%d\n", isalpha(c2)); // 非0(真,大写字母)
printf("%d\n", isalpha(c3)); // 0(假,数字不是字母)
3. int iscntrl(int c);
:判断是否为控制字符
功能:检查字符是否是控制字符(ASCII码0-31,或127(DEL))。
控制字符不可打印,如换行符\n
(10)、回车符\r
(13)。
示例:
char c1 = '\n', c2 = 'a', c3 = 127; // 127是DEL控制符
printf("%d\n", iscntrl(c1)); // 非0(真,换行符是控制符)
printf("%d\n", iscntrl(c2)); // 0(假,'a'是可打印字符)
printf("%d\n", iscntrl(c3)); // 非0(真,DEL是控制符)
4. int isdigit(int c);
:判断是否为十进制数字
功能:检查字符是否是十进制数字(0-9)。
示例:
char c1 = '0', c2 = '9', c3 = 'a';
printf("%d\n", isdigit(c1)); // 非0(真)
printf("%d\n", isdigit(c2)); // 非0(真)
printf("%d\n", isdigit(c3)); // 0(假)
5. int isgraph(int c);
:判断是否为可打印非空格字符
功能:检查字符是否是可打印字符(不含空格),即ASCII码33-126(不包括32空格)。
示例:
char c1 = '!', c2 = ' ', c3 = 'z';
printf("%d\n", isgraph(c1)); // 非0(真,'!'可打印且非空格)
printf("%d\n", isgraph(c2)); // 0(假,空格不满足)
printf("%d\n", isgraph(c3)); // 非0(真,'z'可打印且非空格)
6. int islower(int c);
:判断是否为小写字母
功能:检查字符是否是小写字母(a-z)。
示例:
char c1 = 'a', c2 = 'Z', c3 = '5';
printf("%d\n", islower(c1)); // 非0(真)
printf("%d\n", islower(c2)); // 0(假,大写字母)
printf("%d\n", islower(c3)); // 0(假,数字)
7. int isprint(int c);
:判断是否为可打印字符(含空格)
功能:检查字符是否是可打印字符,包括空格(ASCII码32-126)。
示例:
char c1 = ' ', c2 = '\t', c3 = 'A';
printf("%d\n", isprint(c1)); // 非0(真,空格可打印)
printf("%d\n", isprint(c2)); // 0(假,制表符是控制符)
printf("%d\n", isprint(c3)); // 非0(真,'A'可打印)
8. int ispunct(int c);
:判断是否为标点符号
功能:检查字符是否是标点符号(可打印、非字母、非数字、非空格),如!@#$%
等。
示例:
char c1 = ',', c2 = 'a', c3 = ' ';
printf("%d\n", ispunct(c1)); // 非0(真,逗号是标点)
printf("%d\n", ispunct(c2)); // 0(假,字母不是标点)
printf("%d\n", ispunct(c3)); // 0(假,空格不是标点)
9. int isspace(int c);
:判断是否为空白字符
功能:检查字符是否是空白字符,包括:
- 空格(’ ')
- 制表符(‘\t’)
- 换行符(‘\n’)
- 垂直制表符(‘\v’)
- 换页符(‘\f’)
- 回车符(‘\r’)
示例:
char c1 = '\n', c2 = '\t', c3 = 'a';
printf("%d\n", isspace(c1)); // 非0(真,换行符是空白)
printf("%d\n", isspace(c2)); // 非0(真,制表符是空白)
printf("%d\n", isspace(c3)); // 0(假)
10. int isupper(int c);
:判断是否为大写字母
功能:检查字符是否是大写字母(A-Z)。
示例:
char c1 = 'B', c2 = 'b', c3 = '?';
printf("%d\n", isupper(c1)); // 非0(真)
printf("%d\n", isupper(c2)); // 0(假,小写字母)
printf("%d\n", isupper(c3)); // 0(假,标点)
11. int isxdigit(int c);
:判断是否为十六进制数字
功能:检查字符是否是十六进制数字(0-9, a-f, A-F)。
示例:
char c1 = 'a', c2 = 'F', c3 = 'g';
printf("%d\n", isxdigit(c1)); // 非0(真,小写a-f)
printf("%d\n", isxdigit(c2)); // 非0(真,大写A-F)
printf("%d\n", isxdigit(c3)); // 0(假,'g'超出范围)
12. int isascii(int c);
:判断是否为ASCII字符
功能:检查字符是否是ASCII码(0-127)。
示例:
char c1 = 65, c2 = 128, c3 = 'a';
printf("%d\n", isascii(c1)); // 非0(真,65是'A',属于ASCII)
printf("%d\n", isascii(c2)); // 0(假,128超出ASCII范围)
printf("%d\n", isascii(c3)); // 非0(真,'a'是ASCII字符)
13. int isblank(int c);
:判断是否为空白符(空格或制表符)
功能:检查字符是否是空格(’ ‘)或水平制表符(’\t’)(注意:不包括换行、回车等)。
示例:
char c1 = ' ', c2 = '\t', c3 = '\n';
printf("%d\n", isblank(c1)); // 非0(真,空格)
printf("%d\n", isblank(c2)); // 非0(真,制表符)
printf("%d\n", isblank(c3)); // 0(假,换行符不算)
本地化版本函数(带_l
后缀)
功能:与基础版本功能一致,但会根据传入的locale
(本地化环境)调整判断规则。
- 基础版本默认使用当前程序的本地化环境(
LC_CTYPE
类别) _l
版本允许显式指定本地化环境,适用于多语言场景(如判断非英语字母)
示例:
#include <locale.h>
#include <ctype.h>
int main() {
// 创建一个法语本地化环境(假设系统支持)
locale_t fr_locale = newlocale(LC_CTYPE, "fr_FR.UTF-8", NULL);
char c = 'é'; // 法语中的带重音字母
// 基础版本(默认locale可能不识别)
printf("%d\n", isalpha(c)); // 可能返回0
// 本地化版本(使用法语locale)
printf("%d\n", isalpha_l(c, fr_locale)); // 非0(真,法语中é是字母)
freelocale(fr_locale);
return 0;
}
🚩总结
- 字母/数字类:
isalnum
(字母+数字)、isalpha
(纯字母)、isdigit
(十进制)、isxdigit
(十六进制) - 大小写:
islower
、isupper
- 可打印性:
isprint
(含空格)、isgraph
(不含空格) - 特殊字符:
iscntrl
(控制符)、ispunct
(标点)、isspace
(空白符)、isblank
(空格+制表符) - 本地化:
_l
后缀函数支持多语言场景