C 库 - iswdigit() 函数
C wctype 库中的 iswdigit() 函数用于检查给定的宽字符(用 wint_t 表示)是否对应于(如果已缩小)10 个十进制数字字符"012345678"中的一个。这是一个多功能函数,独立于当前语言环境运行。
此函数可用于输入验证、字符分类、将字符转换为数值或将自定义字符串转换为数字。
"iswdigit"和"iswxdigit"是仅有的两个不受当前安装的 C 语言环境影响的标准宽字符函数。
语法
以下是 iswdigit() 函数的 C 库语法 -
int iswdigit( wint_t ch )
参数
此函数接受一个参数 -
-
ch - 它是一个宽字符类型'wint_t' 需要检查。
返回值
如果宽字符是数字字符,则此函数返回非零值,否则返回零。
示例 1
以下是演示 iswdigit() 函数用法的基本 C 语言示例。
#include <wctype.h> #include <stddef.h> #include <wchar.h> int main() { // ASCII digit 3 wchar_t digit1 = L'3'; // CJK numeral 3 wchar_t digit2 = L''; // alphabetic letter a wchar_t digit3 = L'a'; // 使用 %d 打印 iswdigit 的整数结果 wprintf(L"%d ", iswdigit(digit1)); wprintf(L"%d ", iswdigit(digit2)); wprintf(L"%d ", iswdigit(digit3)); return 0; }
输出
以下是输出 -
1 0 0
示例 2
让我们使用 iswdigit() 函数创建另一个示例,检查宽字符是否为数字,并将其转换为数值。
#include <stdio.h> #include <wctype.h> #include <wchar.h> int wchar_to_digit(wchar_t wc) { if (iswdigit(wc)) { if (wc >= L'0' && wc <= L'9') { // Standard ASCII digits return wc - L'0'; } else if (wc >= L'' && wc <= L'') { // Full-width digits return wc - L''; } } // 处理特殊情况(CJK 数字) switch (wc) { case L'': return 0; case L'': return 1; case L'': return 2; case L'': return 3; case L'': return 4; case L'': return 5; case L'': return 6; case L'': return 7; case L'': return 8; case L'': return 9; default: return -1; } } int main() { // ASCII 数字 5 wchar_t digit1 = L'5'; // CJK 数字 7 wchar_t digit2 = L''; // 非数字 wchar_t digit3 = L'A'; wprintf(L"%d ", wchar_to_digit(digit1)); wprintf(L"%d ", wchar_to_digit(digit2)); wprintf(L"%d ", wchar_to_digit(digit3)); }
输出
以下是输出 -
5 7 -1
示例 3
这里,我们创建一个 C 程序来显示给定宽字符的每个数字。
#include <stdio.h> #include <wctype.h> #include <wchar.h> int main() { wchar_t str[] = L"8252240532"; // 迭代宽字符 for (int i = 0; str[i] != L'\0'; i++) { if (iswdigit(str[i])) { wprintf(L"%lc ", str[i]); } } return 0; }
输出
以下是输出 -
8 2 5 2 2 4 0 5 3 2