阅读:0
作者:严长生
<wctype.h>头文件详解
<wctype.h> 是一个与宽字符处理有关的头文件,它包含了一系列用于检测和转换单个宽字符的函数。
<wctype.h> 是 <ctype.h> 的宽字符版本,<wctype.h> 的出现晚于 <ctype.h>:<ctype.h> 在最初的 ANSI C 标准(1990年发布)中就已经定义了,而 <wctype.h> 在 ANSI C 增补1(Amendment 1)中才引入,这已经是 1995 年的事情了。
引入 <wctype.h> 头文件后,C就能够更好地处理英文以外的语言了,例如汉语、日语、韩语、德语等,此时C才是真正意义上的全球化编程语言。
我们经常见到的字符分类是字母、数字、标点、空白符等,基本上全球所有的语言系统都支持这几种字符分类,它们具有普遍性。除了这些通用的分类,不同的语言系统可能还具有自己独特的分类,例如日语中还包含了片假名、平假名、汉字等分类。
我们可以针对每个通用的分类定义一个函数,但是却不能针对特定语言相关的分类来定义函数,因为:
于是C语言开发者们想了一个办法,定义一个通用的、不针对特定语言文化的函数,由用户自己指定分类名称,这样用一个函数就可以检测所有分类了,包括通用的分类和特定语言相关的分类,这个函数就是 iswctype()。
宽字符转换也是类似的道理。我们经常见到的是大小写字母之间的转换,全球所有的语言系统都支持这两种转换,所以针对它们定义了两个函数,分别是 towlower() 和 towupper()。如果是特定语言相关的转换,例如日语中的片假名转平假名、汉字转平假名等,那么可以使用 towctrans() 函数,该函数可以由用户来指定转换的形式。
<wctype.h> 是 <ctype.h> 的宽字符版本,<wctype.h> 的出现晚于 <ctype.h>:<ctype.h> 在最初的 ANSI C 标准(1990年发布)中就已经定义了,而 <wctype.h> 在 ANSI C 增补1(Amendment 1)中才引入,这已经是 1995 年的事情了。
引入 <wctype.h> 头文件后,C就能够更好地处理英文以外的语言了,例如汉语、日语、韩语、德语等,此时C才是真正意义上的全球化编程语言。
iswalnum() | 判断一个宽字符是否是字母或数字 |
iswalpha() | 判断一个宽字符是否是字母 |
iswblank() | 判断一个宽字符是否是空白符 |
iswcntrl() | 判断一个宽字符是否是控制字符 |
iswdigit() | 判断一个宽字符是否是十进制数字 |
iswgraph() | 判断一个宽字符是否带有图形 |
iswlower() | 判断一个宽字符是否是小写字母 |
iswprint() | 判断一个宽字符是否是可打印字符 |
iswpunct() | 判断一个宽字符是否是标点符号 |
iswspace() | 判断一个宽字符是否是空白符 |
iswupper() | 判断一个宽字符是否是大写字母 |
iswxdigit() | 判断一个宽字符是否是十六进制数字 |
towlower() | 将大写字母转换为小写字母 |
towupper() | 将小写字母转换为大写字母 |
iswctype() | 判断宽字符是否属于某个分类 |
towctrans() | 宽字符转换函数(将宽字符转换为其它类型) |
wctrans() | 返回一个标量类型的字符转换 |
wctype() | 返回一个标量类型的字符分类 |
wctrans_t | 用来表示宽字符转换的标量类型 |
wctype_t | 用来表示宽字符分类的标量类型 |
wint_t | 足以容纳所有宽字符的整数类型 |
WEOF | 宽字符版的文件结束标志 |
深入理解 <wctype.h>
<wctype.h> 的设计非常具有弹性,不仅将 <ctype.h> 中的所有函数都进行了宽字符化,还支持了更多的分类和转换。我们经常见到的字符分类是字母、数字、标点、空白符等,基本上全球所有的语言系统都支持这几种字符分类,它们具有普遍性。除了这些通用的分类,不同的语言系统可能还具有自己独特的分类,例如日语中还包含了片假名、平假名、汉字等分类。
我们可以针对每个通用的分类定义一个函数,但是却不能针对特定语言相关的分类来定义函数,因为:
- 这些函数在其他的语言文化中不能使用;
- 特定语言相关的分类可能非常多,会导致定义大量的函数。
于是C语言开发者们想了一个办法,定义一个通用的、不针对特定语言文化的函数,由用户自己指定分类名称,这样用一个函数就可以检测所有分类了,包括通用的分类和特定语言相关的分类,这个函数就是 iswctype()。
宽字符转换也是类似的道理。我们经常见到的是大小写字母之间的转换,全球所有的语言系统都支持这两种转换,所以针对它们定义了两个函数,分别是 towlower() 和 towupper()。如果是特定语言相关的转换,例如日语中的片假名转平假名、汉字转平假名等,那么可以使用 towctrans() 函数,该函数可以由用户来指定转换的形式。