【C言語】wctype.hで日本語や中国語などのワイド文字に対して分類や変換を行う【標準ライブラリ】

【C言語】wctype.hで日本語や中国語などのワイド文字に対して分類や変換を行う【標準ライブラリ】

wctype.hとは

C言語の標準ライブラリに含まれるは、ワイド文字(wchar_t型)を扱うためのヘッダーファイルです。 これは、通常の型の文字に対して行うような分類(アルファベットか、数字かなど)や変換(大文字・小文字変換)を、 ワイド文字に対して適用できる関数を提供します。

ワイド文字の分類

には、ワイド文字の種類を判定するための関数が多数用意されています。 これらの関数は、通常のctype.hにある関数のワイド文字版に相当します。

主要な分類関数

  • iswalpha(wint_t wc): 文字がアルファベットか判定
  • iswdigit(wint_t wc): 文字が数字か判定
  • iswlower(wint_t wc): 文字が小文字か判定
  • iswupper(wint_t wc): 文字が大文字か判定
  • iswspace(wint_t wc): 文字が空白文字(スペース、タブなど)か判定


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t ch = L'あ';
    if (iswalpha(ch)) {
        wprintf(L"%lc はアルファベットです。\n", ch);
    } else {
        wprintf(L"%lc はアルファベットではありません。\n", ch);
    }
    return 0;
}

ワイド文字の変換

には、ワイド文字の変換を行う関数も用意されています。 これにより、大文字と小文字の変換などをワイド文字で行うことができます。

主要な変換関数

  • towupper(wint_t wc): 小文字を大文字に変換
  • towlower(wint_t wc): 大文字を小文字に変換


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t lower = L'あ';
    wchar_t upper = towupper(lower);
    wprintf(L"%lc を大文字に変換すると %lc になります。\n", lower, upper);
    return 0;
}

wctypeとwctrans

wctype関数とwctrans関数を使うと、より汎用的に文字を分類したり変換したりできます。

wctypeの使い方

  • wctype(const char *name): 文字の分類情報を取得

wctransの使い方

  • wctrans(const char *name): 文字の変換情報を取得


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t ch = L'あ';
    wctype_t t = wctype("alpha");
    if (iswctype(ch, t)) {
        wprintf(L"%lc はアルファベットとして分類されます。\n", ch);
    } else {
        wprintf(L"%lc はアルファベットではありません。\n", ch);
    }
    return 0;
}

具体的な使用例

ワイド文字列をすべて大文字に変換


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t str[] = L"こんにちは";
    for (size_t i = 0; i < wcslen(str); i++) {
        str[i] = towupper(str[i]);
    }
    wprintf(L"大文字変換後: %ls\n", str);
    return 0;
}

ワイド文字列内の数字を検出


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t str[] = L"今日は2024年です。";
    for (size_t i = 0; i < wcslen(str); i++) {
        if (iswdigit(str[i])) {
            wprintf(L"数字を発見: %lc\n", str[i]);
        }
    }
    return 0;
}

ワイド文字の種類ごとに分類


#include <wctype.h>
#include <wchar.h>
#include <stdio.h>

int main() {
    wchar_t str[] = L"Hello, 世界!123";
    for (size_t i = 0; i < wcslen(str); i++) {
        if (iswalpha(str[i])) {
            wprintf(L"%lc はアルファベットです。\n", str[i]);
        } else if (iswdigit(str[i])) {
            wprintf(L"%lc は数字です。\n", str[i]);
        } else {
            wprintf(L"%lc はその他の文字です。\n", str[i]);
        }
    }
    return 0;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です