9

ctype.h で標準ライブラリ関数 isalpha() を使用している C コードがあります。これは Visual Studio 2010-Windows 上にあります。以下のコードでは、char c が「£」の場合、isalpha 呼び出しは、以下のスナップショットに示すようにアサーションを返します。

ここに画像の説明を入力

char c='£';

if(isalpha(c))
{
    printf ("character %c is alphabetic\n",c);

}
else
{
    printf ("character %c is NOT alphabetic\n",c);
}

これは、8 ビット ASCII にこの文字がないためであることがわかります。

では、ASCII テーブルの外でそのような非 ASCII 文字を処理するにはどうすればよいでしょうか?

私がやりたいのは、アルファベット以外の文字が見つかった場合(8ビットASCIIテーブルにない文字が含まれていても)、それを無視できるようにしたいということです。

4

3 に答える 3

8

ではなくintto を渡す必要があります。この関数の標準プロトタイプに注意してください。isalpha()char

int isalpha(int c);

8 ビットの符号付き文字を渡すと、値が負の整数に変換され、通常は で使用される内部配列に不正な負のオフセットが発生しますisxxxx()

ただし、 yourcharがキャスト時のように扱われることを確認する必要があります。unsigned単純に直接キャストすることはできませんint。8 ビット文字の場合、結果intは依然として負になるからです。

これが確実に機能するようにする一般的な方法は、それを にキャストしてから、unsigned char暗黙的な型変換に依存してそれを に変換することintです。

例えば

char c = '£';
int a = isalpha((unsigned char) c);
于 2011-07-14T13:14:20.070 に答える
2

文字型として wchar (UNICODE) を使用してコンパイルしている可能性があります。その場合、使用する isalpha メソッドは iswalpha です。

http://msdn.microsoft.com/en-us/library/xt82b8z8.aspx

于 2011-07-14T13:15:20.990 に答える