C 语言重拾【四】ctype.h 系列的字符函数

C 有一系列专门处理字符的函数,ctype.h 头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回口(假)。例如,如果 isalpha() 函数的参数是一个字母,则返回一个非零值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// cypher2.c -- 替换输入的字母,非字母字符保持不变
#include <stdio.h>
#include <ctype.h> // 包含isalpha()的函数原型
int main (void) {
char ch;
while ((ch = getchar()) != '\n') {
if (isalpha(ch)) // 如果是一个宇字符,
putchar(ch + 1); // 显示该字符的下一个字符
else // 否则,
putchar(ch); // 原样显示
}
putchar(ch); // 显示换行符
return 0;
}

下面是该程序的一个输出示例,注意大小写字母都被替换了,除了空格和标点符号:

Look! It’s a programmer!

Mppl! Ju’t b qsphsbnnfs!

下列两表列出了 ctype.h 头文件中的一些函数。有些函数涉及本地化,指的是为适应特定区域的使用习惯修改或扩展 C 基本用法的工具(例如,许多国家在书写小数点时,用逗号代替点号,于是特殊的本地化可以指定 C 编译器使用逗号以相同的方式输出浮点数,这样 123.45 可以显示为 123,45)。注意,字符映射函数不会修改原始的参数,这些函数只会返回己修改的值。也就是说,下面的语句不改变 ch 的值:

1
tolower(ch);	// 不影响 ch 的值

这样做才会改变 ch 的值:

1
ch = tolower(ch);	//把 ch 转换成小写字母
函数名 如果是下列参数时,返回值为真
isalnum() 字母数字(字母或数字)
isalpha() 字母
isblank() 标准空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符
iscntrl() 控制字符,如 Ctrl+B
isdigit() 数字
isgraph() 除空格之外的任意可打印字符
islower() 小写字母
isprint() 可打印字符
ispunct() 标点符号(除空格或字母数字字符以外的任何可打印字符)
isspace() 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化定义的字符)
isupper() 大写字母
isxdigit() 十六进制数字符
函数名 行为
tolower() 如果参数是大写字符,该函数返回小写字符;否则,返回原始参数
toupper() 如果参数是小写字符,该函数返回大写字符;否则,返回原始参数

参考文献

  • C Primer Plus