# wctype.h wctype.h 提供 ctype.h 里面函数的宽字符版本。 ## 宽字符类型判断函数 下面函数判断宽字符的类型。 - iswalnum() 测试宽字符是否为字母数字 - iswalpha() 测试宽字符是否为字母 - iswblank() 测试这是否是一个宽空白字符 - iswcntrl() 测试这是否是一个宽控制字符。 - iswdigit() 测试这个宽字符是否是数字 - iswgraph() 测试宽字符是否是可打印的非空格字符 - iswlower() 测试宽字符是否为小写 - iswprint() 测试宽字符是否可打印 - iswpunct() 测试宽字符是否为标点符号 - iswspace() 测试宽字符是否为空格 - iswupper() 测试宽字符是否为大写 - iswxdigit() 测试宽字符是否为十六进制数字 ## wctype(),iswctype() `iswctype()`是上一节各种宽字符类型判断函数的通用版本,必须与`wctype()`配合使用。 ```c int iswctype(wint_t wc, wctype_t desc); ``` `iswctype()`接受两个参数,第一个参数是一个需要判断类型的宽字符,第二个参数是宽字符类型描述,来自`wctype()`的返回值。 如果宽字符属于指定类型,`iswctype()`返回一个非零值,否则返回零。 `wctype()`用来获取某个种类宽字符的类型描述。 ```c wctype_t wctype(const char* property); ``` `wctype()`的参数是一个给定的字符串,可用的值如下:alnum、alpha、blank、cntrl、digit、graph、lower、print、punct、space、upper、xdigit。 `wctype()`的返回值的类型为 wctype_t,通常是一个整数。如果参数是一个无效值,则返回`0`。 ```c if (iswctype(c, wctype("digit"))) // 相当于 if (iswdigit(c)) ``` 上面示例用来判断宽字符`c`是否为数值,相当于`iswdigit()`。 `iswctype()`的完整类型判断如下。 ```c iswctype(c, wctype("alnum")) // 相当于 iswalnum(c) iswctype(c, wctype("alpha")) // 相当于 iswalpha(c) iswctype(c, wctype("blank")) // 相当于 iswblank(c) iswctype(c, wctype("cntrl")) // 相当于 iswcntrl(c) iswctype(c, wctype("digit")) // 相当于 iswdigit(c) iswctype(c, wctype("graph")) // 相当于 iswgraph(c) iswctype(c, wctype("lower")) // 相当于 iswlower(c) iswctype(c, wctype("print")) // 相当于 iswprint(c) iswctype(c, wctype("punct")) // 相当于 iswpunct(c) iswctype(c, wctype("space")) // 相当于 iswspace(c) iswctype(c, wctype("upper")) // 相当于 iswupper(c) iswctype(c, wctype("xdigit")) // 相当于 iswxdigit(c) ``` ## 大小写转换函数 wctype.h 提供以下宽字符大小写转换函数。 - towlower() 将大写宽字符转换为小写 - towupper() 将小写宽字符转换为大写 - towctrans() 宽字符大小写转换的通用函数 - wctrans() 大小写转换的辅助函数,配合 towctrans() 使用 先看`towlower()`和`towupper()`的用法示例。 ```c towlower(L'B') // b towupper(L'e') // E ``` `towctrans()`和`wctrans()`的原型如下。 ```c wint_t towctrans(wint_t wc, wctrans_t desc); wctrans_t wctrans(const char* property); ``` 下面是它们的用法示例。 ```c towctrans(c, wctrans("toupper")) // 相当于 towupper(c) towctrans(c, wctrans("tolower")) // 相当于 towlower(c) ```