<wctype.h>
-- 函数
阅读:0
作者:严长生
wctype() 返回一个标量类型的字符分类
wctype_t wctype (const char* category);
wctype() 函数用来获得一个标量类型的字符分类。一个宽字符可以是字母、十进制数字、空白符、可打印字符等不同的分类,它们可以由 iswalpha()、iswdigit()、iswspace()、iswprint() 等专门的宽字符检测函数来确定,也可以由 iswctype() 这个通用的宽字符检测函数来确定。
我们可以用文本(字符串)来描述字符的分类,也可以用标量(一般是整数)来描述字符的分类,文本和标量是一一对应的。就像班级里的学生,我们可以喊他的名字(文本),也可以喊他的学号(标量),这两种方式都能够找到唯一的学生。
对于用户来说,文本比标量更加直观,更加容易记忆;对于编程语言来说,标量比文本更加容易处理,计算机底层都是整数。
标量和文本之间往往没有明确的关联,并且标量的值可能会随着不同的库实现、不同的区域设置而变化,要想让用户记住标量的值是不现实的。这样一来就必须提供一个函数,让用户可以通过这个函数获取文本对应的标量,wctype() 就是干这件事的:我们可以给 wctype() 传递一个用文本表示的字符分类,它会返回一个用标量表示的字符分类。
C语言支持全球的语言系统,可以处理英文、中文、日文、韩文、德语、法语、拉丁文、希腊文等。在英文以外的语言环境中,可能会包含更多的字符分类,例如日语中还有平假名、片假名、汉字等分类。
我们可以通过 setlocale() 函数进行地域设置,改变程序的语言环境,让程序使用 ASCII 以外的字符集,例如 GBK(简体中文)、BIG5(繁体中文)、Shift-JIS(日文)、Unicode(世界统一码) 等。C语言标准规定,无论在哪种区域设置下,无论在哪种语言环境下,都应该至少包含以下几种字符分类:
文本形式的字符分类 | 说 明 | 对应的字符分类函数 |
---|---|---|
"alnum" | 字母和十进制数字 | iswalnum() |
"alpha" | 字母 | iswalpha() |
"blank" | 空白符 | iswblank() |
"cntrl" | 控制字符 | iswcntrl() |
"digit" | 十进制数字 | iswdigit() |
"graph" | 图形字符 | iswgraph() |
"lower" | 小写字母 | iswlower() |
"print" | 可打印字符 | iswprint() |
"punct" | 标点符号 | iswpunct() |
"space" | 空白符 | iswspace() |
"upper" | 大写字母 | iswupper() |
"xdigit" | 十六进制数字 | iswxdigit() |
参数
-
category
以字符串(文本)形式表示的字符分类(如上表所示)。
返回值
返回一个标量形式(wctype_t 类型)的字符分类。文本所对应的标量值不是固定的,它可能会随着不同的库实现、不同的区域设置而变化,所以不能直接使用一个固定的标量值,或者猜测标量值,而应该坚持使用 wctype() 函数来获取对应的标量值。
实例
判断宽字符串中的字符是否是大写字母,如何是,那么转换成小写字母。#include <stdio.h> #include <wchar.h> #include <wctype.h> int main () { int i=0; wchar_t str[] = L"C/C++ Python Java Golang\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; }运行结果:
c/c++ python java golang