C 标准库 wctype.h详解

wctype.h 提供 ctype.h 里面函数的宽字符版本。

宽字符类型判断函数

下面函数判断宽字符的类型。

wctype(),iswctype()

iswctype()是上一节各种宽字符类型判断函数的通用版本,必须与wctype()配合使用。

int iswctype(wint_t wc, wctype_t desc);

iswctype()接受两个参数,第一个参数是一个需要判断类型的宽字符,第二个参数是宽字符类型描述,来自wctype()的返回值。

如果宽字符属于指定类型,iswctype()返回一个非零值,否则返回零。

wctype()用来获取某个种类宽字符的类型描述。

wctype_t wctype(const char* property);

wctype()的参数是一个给定的字符串,可用的值如下:alnum、alpha、blank、cntrl、digit、graph、lower、print、punct、space、upper、xdigit。

wctype()的返回值的类型为 wctype_t,通常是一个整数。如果参数是一个无效值,则返回0

if (iswctype(c, wctype("digit")))
// 相当于
if (iswdigit(c))

上面示例用来判断宽字符c是否为数值,相当于iswdigit()

iswctype()的完整类型判断如下。

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()的用法示例。

towlower(L'B') // b
towupper(L'e') // E

towctrans()wctrans()的原型如下。

wint_t towctrans(wint_t wc, wctrans_t desc);
wctrans_t wctrans(const char* property);

下面是它们的用法示例。

towctrans(c, wctrans("toupper"))    // 相当于 towupper(c)
towctrans(c, wctrans("tolower"))    // 相当于 towlower(c)

教程来源于Github,感谢大佬的无私奉献,致敬!

技术教程推荐

硅谷产品实战36讲 -〔曲晓音〕

机器学习40讲 -〔王天一〕

深入剖析Kubernetes -〔张磊〕

DDD实战课 -〔欧创新〕

Java业务开发常见错误100例 -〔朱晔〕

操作系统实战45讲 -〔彭东〕

陈天 · Rust 编程第一课 -〔陈天〕

大数据经典论文解读 -〔徐文浩〕

深入C语言和程序运行原理 -〔于航〕