ctype.h
1. 简介
ctype.h
是C标准库中的一部分, 包含几个有关测试字符是否属于特定的字符类别的函数. 所有函数都以int作为参数, int所表达的值必须为EOF或可转换的unsigned char. 如果参数符合规范, 所有函数都将返回一个非零整数; 如果不符合则返回零.
2. 函数列表
2.1 int isalnum(int c);
用于检查参数c是否为字母或数字, 参数c为整数, 返回值为True或者False
|
2.2 int isalpha(int c);
参数c是否为字母, 参数c为int类型数值, 若c为字符类型则返回非零否则返回零
|
2.3 void iscntrl(int c);
判断参数c是否为控制符, 控制字符包括0x00-0x1F, 再加上0x7F(DEL), 参数c为int类型数值, 若为控制符则返回非零值;否则返回零. 控制字符在屏幕上不占位, 所以需要使用iscntrl()来检测
|
2.4 int isdigit(int c);
检查参数c是否为阿拉伯数字0-9, 参数c为int类型字符, 若c为阿拉伯数字, 则返回true; 否则返回0
|
2.5 int isgraph(int c);
该函数用来判断参数是否为除空格以外的可打印字符, 参数c为int类型整数, 若参数为非空格字符且是可打印的ASCII码, 那么返回非0值; 否则返回0
|
2.6 int islower(int c);
该函数用来判断参数是否为小写字母, 参数c为int类型整数, 若参数为小写字母, 则返回非0; 否则返回0
|
2.7 int isprint(int c);
该函数用来判断一个字符是否为打印字符,与isgraph不同,空格被认为是可打印的;参数c为int类型的数值,若参数为可打印字符,则返回非0,否则返回0
|
2.8 int ispunct(int c);
该函数用来检测参数是否为标点符号或特殊符号 (非空格, 非数字和非英文字母), 参数c为int类型整数, 若参数为符号, 则返回非0; 否则返回0
|
2.9 int isspace(int c);
该函数判断参数是否为空格字符, 参数c为int类型整数, 若参数为空白字符, 则返回非0, 否则返回0
空格字符包括: ' '(0x20,空格),'\t'(0x09,tab),'\n'(0x0a,新的一行),'\v'(0x0b,垂直tab),'\f'(0x0c,换页),'\r'(0x0d,回车)
|
2.10 int isupper(int c);
该函数判断参数是否为大写英文字符,参数c为int型整数,若参数为大写英文字母返回非0,否则返回0
|
2.11 int isxdigit(int c);
该函数判断参数是否为16进制数字, 参数c为int类型数值, 若参数c为16进制数字, 则返回非0, 否则返回0
十六进制数字: 0123456789ABCDEF
|
2.12 int tolower(int c);
该函数将参数转换为小写字母, 参数c为int类型数值, 若成功将参数转换为小写字母, 则返回其小写字母; 否则返回原有字符
|
2.13 int toupper(int c)
该函数将参数转换为大写字母, 参数c为int类型数值, 若参数可以转换为大写字符, 则返回该参数的大写字符; 否则返回原字符
|
3. ctype.h的实现
3.1 字符分类
- 数字: 0-9中的一个十进制数
- 十六进制数字: 数字或字母表的前6个字母(A-Z, a-z)
- 小写字母: a-z中的一个
- 大写字母: A-Z中的一个
- 字母: 大写字母或小写字母
- 字母数字: 字母或数字
- 图形字符: 占据一个打印位置, 输出到显示设备时可见的字符
- 标点符号: 非字母数字的图形字符
- 打印字符: 图形字符或空格字符' '
- 空格: 空格字符' '和其他5个控制字符(换页PF, 换行NL, 回车CR, 水平制表符HT, 垂直制表VT)
- 控制字符: 上述5个控制字符, 退格符BS和警报符BEL, 上述字符中的一个字符
这几类字符就包含了ctype.h的全部函数功能, 其中会有包含的关系, 可总结为下图:
3.2 ctype.h头文件
<ctype.h>
中声明的函数代码都是围绕着3个转换表构建的, 通过对ASCII表的重建, 使得只用位与运算就可以知道字符的类别. 以下是ctype.h的头文件.
// ctype.h standard header |
3.3 ASCII表重建
以下是xctype.c, xtolower.c, xtoupper.c的表实现.
/* xctype.c _Ctype conversion -- ASCII version */ |
/* xtolower.c _Tolower conversion table -- ASCII version */ |
/* xtoupper.c _Toupper conversion table -- ASCII version */ |