C 库 - iswdigit() 函数

❮ C 标准库 - <wctype.h>


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

❮ C 标准库 - <wctype.h>