3

char cが文字かどうかをチェックするC関数を作成(または検索)したいのですが...もちろん、azとAZに対してこれを簡単に行うことができます。

ただし、c ==á、ã、ô、ç、ëなどをテストするとエラーが発生します

おそらく、それらの特殊文字は、文字よりも多くに格納されています...

知りたいのは、これらの特殊文字がどのように格納されるか、関数が受け取る必要のある引数、およびその方法を教えてください。また、これをすでに行っている標準機能があるかどうかも知りたいです。

4

4 に答える 4

4

iswalpha()私はあなたがルーチンを探していると思います:

   #include <wctype.h>

   int iswalpha(wint_t wc);

DESCRIPTION
   The iswalpha() function is the wide-character equivalent of
   the isalpha(3) function.  It tests whether wc is a wide
   character belonging to the wide-character class "alpha".

LC_CTYPE電流に依存するlocale(7)ため、複数のタイプの入力を同時に正しく処理することになっているプログラムでの使用は理想的ではない場合があります。

于 2011-04-09T12:08:23.100 に答える
3

ISO 8859-1や8859-15(または他の8859-xコードセットのいずれか)などのシングルバイトコードセットを使用している場合、使用すること(または他の適切な呼び出し)isalpha()も覚えていれば、関数はその役割を果たします。setlocale(LC_ALL, "");setlocale())あなたのプログラムで。これがないと、プログラムはCロケールで実行され、ASCII文字(0x00..0x7Fの範囲の8859-x文字)のみが分類されます。

マルチバイトまたはワイド文字のコードセット(UTF8やUTF16など)を使用している場合は、およびにあるワイド文字関数を調べる必要があり<wchar.h>ます<wctype.h>

于 2011-04-09T13:15:04.973 に答える
1

これらの文字の保存方法は、ロケールによって異なります。ほとんどのUNIXシステムでは、それらはUTF8として格納されますが、Win32マシンはそれらをUTF16として表す可能性があります。UTF8は可変量の文字として格納されますが、UTF16はサロゲートペアを使用して格納されます-したがって、wchar_t(またはunsigned short)内に格納されます(ちなみに、Windowsのsizeof(wchar_t)は2(* nixでは4)ですが、したがって、サロゲートペアエンコーディングが使用されている場合、1文字を格納するために2つのwchar_tタイプが必要になることがよくあります。これは多くの場合に使用されます)。

述べたように、iswalpha()ルーチンはあなたのためにこれを行い、ここに文書化されています。ロケール固有の問題を処理する必要があります。

于 2011-04-09T12:15:10.850 に答える
1

おそらくhttp://site.icu-project.org/が必要です。このためのAPIを備えたポータブルライブラリを提供します。

于 2011-04-09T12:43:46.747 に答える