1

ユーザーが TextField にデータを入力できるようにしています。ユーザーがŠ1234DTextField に入力します。

私が持っているコードは次のようになります。

NSString *string = textField.text;
for (int nCtr = 0; nCtr < [string length]; nCtr++) {
                const char chars = [string characterAtIndex:nCtr];
                int isAlpha = isalpha(chars);
}

文字列出力は次のようになります:Š1234D 次に、最初の chars 値を出力しました。「Š」ではなく「`」のようになります。これはなぜですか?コードにも特殊文字を許可したいと思います。

どんな提案も大歓迎です。いくつかのガイダンスが必要です。ありがとう

4

2 に答える 2

3

文字値を(8ビット)ではなく(16ビット)の[NSString chatacterAtIndex:]戻り値として切り捨てています。試す:unicharchar

unichar chars = [string characterAtIndex:nCtr];

更新:文字のテストには使用しないでください。isalpha()ラテン文字セットに制限されており、ラテン文字以外の文字に対応できるものが必要です。代わりに次のコードを使用してください。

NSCharacterSet *letterSet = [NSCharacterSet letterCharacterSet];
NSString *string = textField.text;
for (NSUIntger nCtr = 0; nCtr < [string length]; nCtr++)
{
    const unichar c = [string characterAtIndex:nCtr];
    BOOL isAlpha = [letterSet characterIsMember:c];
    ...
}
于 2013-02-27T11:12:52.040 に答える
3

characterAtIndex:(1バイトのASCII文字unichar)ではなく、(2バイトのUnicode文字)を返します。charにキャストするとchar、2バイトのうちの1つだけが取得されます。

コンパイラの警告をオンにする必要があります。「疑わしい暗黙の変換」でうまくいくはずだと思います。

isAlpha(char)別の注意点として、を使用することはできませんunichar。使用する[[NSCharacterSet letterCharacterSet] characterIsMember:chars]

于 2013-02-27T11:13:01.490 に答える