<wctype.h> -- 函数
阅读:0       作者:严长生

wctrans() 返回一个标量类型的字符转换

wctrans_t wctrans (const char* transformation);

wctrans() 函数用来获得一个标量类型的字符转换。

一个宽字符可以是大写字母、小写字母、十进制数字、空白符、可打印字符等不同的分类,其中大写字母和小写字母之间可以相互转换。

C语言支持全球的语言系统,可以处理英文、中文、日文、韩文、德语、法语、拉丁文、希腊文等。在英文以外的语言环境中,可能会包含更多的字符转换,例如日语中还有平假名、片假名、汉字之间的转换。
我们可以通过 setlocale() 函数进行地域设置,改变程序的语言环境,让程序使用 ASCII 以外的字符集,例如 utf-8(简体中文)、BIG5(繁体中文)、Shift-JIS(日文)、Unicode(世界统一码) 等。
我们可以用文本(字符串)来描述字符的转换,也可以用标量(一般是整数)来描述字符的转换,文本和标量是一一对应的。就像班级里的学生,我们可以喊他的名字(文本),也可以喊他的学号(标量),这两种方式都能够找到唯一的学生。

例如,可以用"toupper"这段文本来表示转换为大写字母,还可以用100这个整数来表示转换为大写字母,此时"toupper"100就是对应的。

对于用户来说,文本比标量更加直观,更加容易记忆;对于编程语言来说,标量比文本更加容易处理,计算机底层都是整数。

标量和文本之间往往没有明确的关联,并且标量的值可能会随着不同的库实现、不同的区域设置而变化,要想让用户记住标量的值是不现实的。这样一来就必须提供一个函数,让用户可以通过这个函数获取文本对应的标量,wctrans() 就是干这件事的:我们可以给 wctrans() 传递一个用文本表示的字符转换,它会返回一个用标量表示的字符转换。

C语言标准规定,无论在哪种区域设置下,无论在哪种语言环境下,都必须至少包含以下两种转换形式:
字符转换 说  明 对应的字符转换函数
"tolower" 转换为小写字母 towlower
"toupper" 转换为大写字母 towupper

参数

  • transformation

    以字符串(文本)形式表示的字符转换(如上表所示)。

返回值

返回一个标量形式(wctrans_t 类型)的字符转换。

文本所对应的标量值不是固定的,它可能会随着不同的库实现、不同的区域设置而变化,所以不能直接使用一个固定的标量值,或者猜测标量值,而应该坚持使用 wctrans() 函数来获取对应的标量值。

实例

判断宽字符串中的字符是否是小写字母,如何是,那么转换成大写字母。
#include <stdio.h>
#include <wctype.h>
int main ()
{
    int i=0;
    wchar_t str[] = L"C C++ Java Pythonn";
    wchar_t c;
    wctype_t check = wctype("lower");
    wctrans_t trans = wctrans("toupper");
    while (str[i])
    {
        c = str[i];
        if (iswctype(c,check)) c = towctrans(c,trans);
        putwchar (c);
        i++;
    }
    return 0;
}
运行结果:
C C++ JAVA PYTHON