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';
   
   // Using %d to print the integer result of iswdigit
   wprintf(L"%d\n", iswdigit(digit1));
   wprintf(L"%d\n", iswdigit(digit2));
   wprintf(L"%d\n", 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'0' && wc <= L'9') {
	     // Full-width digits
         return wc - L'0';
      }
   }

   // Handle special cases (CJK numerals)
   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 digit 5
   wchar_t digit1 = L'5';
   // CJK numeral 7
   wchar_t digit2 = L'七';
   // Not a digit
   wchar_t digit3 = L'A';

   wprintf(L"%d\n", wchar_to_digit(digit1));
   wprintf(L"%d\n", wchar_to_digit(digit2));
   wprintf(L"%d\n", 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";

   // Iterate over wide character
   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_library_wctype_h.htm
廣告