wchar_t を使用した isalpha または isalnum の同等の関数は何ですか?
wctype ?
例もいいでしょう
ありがとう
wchar_t を使用した isalpha または isalnum の同等の関数は何ですか?
wctype ?
例もいいでしょう
ありがとう
質問に「ローカリゼーション」というタグを含めます。国際出願を作成する場合は、アルファベットまたは数字で何を意味するのかを明確に定義する必要があります。GetStringTypeEx
Windows用のプログラムを作成する場合は、関数を使用することをお勧めします( http://msdn.microsoft.com/en-us/library/dd318118.aspxを参照)。たとえば、コード
BOOL bSuccess;
int isTrue;
WORD wCharType;
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE1, L"a", 1, &wCharType);
if (wCharType & C1_ALPHA == C1_ALPHA) {
//
}
CT_CTYPE3
また、またはを使用CT_CTYPE2
して、文字が表意文字であるかどうか、またはヨーロッパの数字であるかどうかを判別することもできます。
より正確には、関数、、、を使用して、iswalpha
次の文字をテストしてみてください:L'a'、L'ü'、L'á'、L'я'(ロシア語の文字)、L'ノ'(日本語の文字カタカナ)、L'一'(日本語で1)。あなたはそれを見るでしょうIsCharAlphaW
iswalnum
iswdigit
GetStringTypeExW
コード
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE2, L"一", 1, &wCharType);
if ((wCharType & C2_EUROPENUMBER) == wCharType) {
// numeric
}
L"一"はヨーロッパの数字ではないと言います。GetStringTypeExW
たとえば、アラビア数字などからヨーロッパの番号を特定するために使用できます。
したがって、要件をより正確に指定してから、要件に基づいてAPIを選択することをお勧めします。一般に、C APIの使用は、国際的なアプリケーションにとって最良の方法ではありません。
std::isaplha<charT>
から見てみましょう<locale>
。それをとして使用できますstd::isalpha<wchar_t>
。
厳密に言えば、これはVisual Studio / Windowsでは不可能です。これは、wchar_tがこのプラットフォームでは2バイトであり、Unicodeコードポイントを保持できないためです。
本当に必要なのはchar*を受け入れる関数です。ICUAFAIKに1つあります。
https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmfulも参照してください
「同等」をどのように定義するかによって異なります。C の文字クラスは、Unicode の文字クラスに比べて非常に単純です。たとえば、特定のコード ポイントが通常文字を表しているかどうかをテストする場合 (「文字」の定義について)、一般的なカテゴリをテストできますL
。特定の文字列が有効な識別子を構成しているかどうかを確認したい場合は、UAX #31などiswalnum
を使用できiswalpha
、現在の「ロケール」設定に応じて意図した結果が得られる可能性があります。
ヘッダーは<wctype.h>
. 基本的なマクロ/関数名には「w」が含まれています。
int iswalpha(wint_t wc);
int iswalnum(wint_t wc);
等。
次の機能もあります。
wctype_t wctype(const char *property);
int iswctype(wint_t wc, wctype_t desc);
たとえば、次のように記述できます。
if (iswctype(wc, wctype("alnum")))
...process a wide alphanumeric...
または、単に次のように書くこともできます。
if (iswalnum(wc))
...process a wide alphanumeric...