当前位置:嗨网首页>书籍在线阅读

05-ctype.h系列的字符函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.2.2  ctype.h 系列的字符函数

注意到程序清单7.2的输出中,最后输入的点号(.)被转换成斜杠(/),这是因为斜杠字符对应的ASCII码比点号的ASCII码多1。如果程序只转换字母,保留所有的非字母字符(不只是空格)会更好。本章稍后讨论的逻辑运算符可用来测试字符是否不是空格、不是逗号等,但是列出所有的可能性太繁琐。C有一系列专门处理字符的函数, ctype.h 头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回0(假)。例如,如果 isalpha() 函数的参数是一个字母,则返回一个非零值。程序清单7.3在程序清单7.2的基础上使用了这个函数,还使用了刚才精简后的循环。

程序清单7.3  cypher2.c 程序

// 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!

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

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

这样做才会改变ch的值:

ch = tolower(ch); // 把ch转换成小写字母
表7.1  `ctype.h` 头文件中的字符测试函数

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

表7.2  `ctype.h` 头文件中的字符映射函数

| 函数名 | 行为 | | :----- | :----- | :----- | :----- | | tolower() | 如果参数是大写字符,该函数返回小写字符;否则,返回原始参数 | | toupper() | 如果参数是小写字符,该函数返回大写字符;否则,返回原始参数 |