【C言語】wctype.hで日本語や中国語などのワイド文字に対して分類や変換を行う【標準ライブラリ】
wctype.hとは
C言語の標準ライブラリに含まれる
ワイド文字の分類
主要な分類関数
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;
}