【Linux 学习指南】C 语言<ctype.h>字符小手册

发布于:2025-07-20 ⋅ 阅读:(14) ⋅ 点赞:(0)

请添加图片描述


🌠 C语言字符判断函数:从isalnumisascii_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(十六进制)
  • 大小写:islowerisupper
  • 可打印性:isprint(含空格)、isgraph(不含空格)
  • 特殊字符:iscntrl(控制符)、ispunct(标点)、isspace(空白符)、isblank(空格+制表符)
  • 本地化:_l后缀函数支持多语言场景
    请添加图片描述

网站公告

今日签到

点亮在社区的每一天
去签到