<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 以外的字符集,例如 utf-8(简体中文)、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 Japanesen";
    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