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 对应的宽字符;如果转换失败,那么直接返回 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;
}
运行结果: