<wctype.h>
-- 函数
阅读:0
作者:严长生
towctrans() 字符转换函数(将字符转换为其它类型)
wint_t towctrans(wint_t wc, wctrans_t category);
towctrans() 是字符转换函数,用来将当前类型的字符转换为其它类型的字符。towctrans() 可以在大写字母和小写字母之间进行转换,它将 towlower() 和 towupper() 的功能融为一体,是一个通用的字符转换函数。
既然 <wctype.h> 头文件已经包含了专门的字符转换函数 towlower() 和 towupper(),为什么又提供了一个通用的 iswctype() 呢?因为现有的 towlower() 和 towupper() 不够用!
C语言支持全球的语言系统,可以处理英文、中文、日文、韩文、德语、法语、拉丁文、希腊文等。在英文以外的语言环境中,可能会包含更多的字符转换,例如日语中还有平假名、片假名、汉字之间的转换。
大小写字母之间的转换是通用的,任何一种语言环境都能够支持;平假名、片假名、汉字之间的转换和特定的语言有关,并不是所有的语言环境都支持。
我们可以通过 setlocale() 函数进行地域设置,改变程序的语言环境,让程序使用 ASCII 以外的字符集,例如 GBK(简体中文)、BIG5(繁体中文)、Shift-JIS(日文)、Unicode(世界统一码) 等。我们可以针对每种通用的字符转换定义一个函数,但是却不能针对特定语言相关的转换来定义函数,因为:
- 这些函数在其他的语言文化中不能使用;
- 特定语言相关的字符转换可能有很多种,会导致定义大量的函数。
于是C语言开发者们想了一个办法,定义一个通用的、不针对特定语言文化的函数,由用户自己指定转换方式,这样用一个函数就可以在各种类型之间进行转换了,包括通用的转换和特定语言相关的转换,这个函数就是 towctrans()。
C语言标准规定,无论在哪种区域设置下,无论在哪种语言环境下,都必须至少包含以下两种转换形式:
字符转换 | 说 明 | 对应的字符转换函数 |
---|---|---|
"tolower" | 转换为小写字母 | towlower |
"toupper" | 转换为大写字母 | towupper |
参数
-
wc
要转换的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。 -
category
要转换的目标类型。这里的 category 并不是上表中出现的文本(字符串)形式,而是 wctrans_t 类型的标量形式;借助 wctrans() 函数可以获取文本对应的标量。
返回值
如果转换成功,那么返回与 wc 对应的宽字符;如果转换失败,那么直接返回 wc(值未变)。实例
判断宽字符串中的字符是否是大写字母,如何是,那么转换成小写字母。#include <stdio.h> #include <wctype.h> int main () { int i=0; wchar_t str[] = L"English Chinese Japanese\n"; wchar_t c; wctype_t check = wctype("upper"); wctrans_t trans = wctrans("tolower"); while (str[i]) { c = str[i]; if (iswctype(c,check)) c = towctrans(c,trans); putwchar (c); i++; } return 0; }运行结果:
english chinese japanese