这个头文件提供 字符类型检测 的相关功能,例如判断一个字符是否是字母、数字或标点符号等,并可以对字母进行大小写转换。
| 类型 | 标准 | 说明 |
|---|---|---|
wint_t |
C95 | 可以保存任何有效宽字符和至少一个其他值的整数类型 |
wctrans_t |
C95 | 保存特定于语言环境的字符映射的标量类型 |
wctype_t |
C95 | 保存特定于语言环境的字符分类的标量类型 |
| 类型 | 标准 | 说明 |
|---|---|---|
WEOF |
C95 | 用于指示错误的 wint_t 类型的非字符值 |
| 函数 | 标准 | 说明 |
|---|---|---|
iswalnum |
C95 | 判断宽字符是否是字母或数字 |
iswalpha |
C95 | 判断宽字符是否是字母 |
iswlower |
C95 | 判断宽字符是否是小写字母 |
iswupper |
C95 | 判断宽字符是否是大写字母 |
iswdigit |
C95 | 判断宽字符是否是数字 |
iswxdigit |
C95 | 判断宽字符是否是十六进制数字 |
iswcntrl |
C95 | 判断宽字符是否是控制字符 |
iswgraph |
C95 | 判断宽字符是否是可显示字符,包含数字、字母、标点符号 |
iswspace |
C95 | 判断宽字符是否是空白(white-space)字符,包含空格、水平制表符、竖直制表符、回车符、换行符、换页符 |
iswblank |
C99 | 判断宽字符是否是空白(blank)字符,空格、水平制表符 |
iswprint |
C95 | 判断宽字符是否是可打印字符,包含数字、字母、标点符号、空白 |
iswpunct |
C95 | 判断宽字符是否是标点符号 |
towlower |
C95 | 将宽字符转换为小写字母 |
towupper |
C95 | 将宽字符转换为大写字母 |
towctrans |
C95 | 根据指定的 LC_CTYPE 映射类别执行字符映射 |
wctrans |
C95 | 在当前 C 语言环境中查找字符映射类别 |
#include <stdio.h>
#include <locale.h> // 设置语言环境
#include <wchar.h> // 宽字符输入、输出
#include <wctype.h>
int main(void) {
// 设置语言环境
if (setlocale(LC_ALL, "zh_CN.UTF-8") == NULL)
{
fprintf(stderr, "语言环境设置失败\n"); // 语言环境设置失败,只能使用 printf 打印
return 1;
}
wchar_t ch;
wprintf(L"请输入一个字符: ");
wscanf(L"%lc", &ch);
// 检查字符类型
wprintf(L"\n字符 '%lc' 的类型判断:\n", ch);
wprintf(L"iswalnum(): %s\n", iswalnum(ch) ? "是" : "否"); // 字母或数字
wprintf(L"iswalpha(): %s\n", iswalpha(ch) ? "是" : "否"); // 字母
wprintf(L"iswdigit(): %s\n", iswdigit(ch) ? "是" : "否"); // 数字
wprintf(L"iswlower(): %s\n", iswlower(ch) ? "是" : "否"); // 小写字母
wprintf(L"iswupper(): %s\n", iswupper(ch) ? "是" : "否"); // 大写字母
wprintf(L"iswspace(): %s\n", iswspace(ch) ? "是" : "否"); // 空白字符
wprintf(L"iswpunct(): %s\n", iswpunct(ch) ? "是" : "否"); // 标点符号
wprintf(L"iswprint(): %s\n", iswprint(ch) ? "是" : "否"); // 可打印字符
wprintf(L"iswgraph(): %s\n", iswgraph(ch) ? "是" : "否"); // 可显示字符(非空格)
wprintf(L"iswcntrl(): %s\n", iswcntrl(ch) ? "是" : "否"); // 控制字符
// 字符转换
wprintf(L"\n字符 '%lc' 的转换结果:\n", ch);
wprintf(L"towlower(): %lc\n", towlower(ch)); // 转换为小写
wprintf(L"towupper(): %lc\n", towupper(ch)); // 转换为大写
return 0;
}
说明:
这个示例首先通过 setlocale 将语言环境设为 zh_CN.UTF-8,然后提示输入一个字符,最后对该字符进行类型判断和大小写转换。
在 setlocale 失败时,使用 fprintf 而非 fwprintf 打印错误信息;这是因为没有设置正确的语言环境时,wprintf 系列函数无法使用。
运行结果:
请输入一个字符: 我
字符 '我' 的类型判断:
iswalnum(): 是
iswalpha(): 是
iswdigit(): 否
iswlower(): 否
iswupper(): 否
iswspace(): 否
iswpunct(): 否
iswprint(): 是
iswgraph(): 是
iswcntrl(): 否
字符 '我' 的转换结果:
towlower(): 我
towupper(): 我
请输入一个字符: a
字符 'a' 的类型判断:
iswalnum(): 是
iswalpha(): 是
iswdigit(): 否
iswlower(): 是
iswupper(): 否
iswspace(): 否
iswpunct(): 否
iswprint(): 是
iswgraph(): 是
iswcntrl(): 否
字符 'a' 的转换结果:
towlower(): a
towupper(): A
请输入一个字符: 8
字符 '8' 的类型判断:
iswalnum(): 是
iswalpha(): 否
iswdigit(): 是
iswlower(): 否
iswupper(): 否
iswspace(): 否
iswpunct(): 否
iswprint(): 是
iswgraph(): 是
iswcntrl(): 否
字符 '8' 的转换结果:
towlower(): 8
towupper(): 8