0

nsstring の各文字を 1 つずつ異なる nscharactersets と比較し、一致する文字セットに応じて異なる操作を実行したいと考えています。

for ループを使用して、比較のために各文字を部分文字列に割り当てることができます。

- (void) compareCharactersOfWord: (NSString *) word {

    for (int i = 0; i<[word length]; i++) {

        NSString *substring = [word substringWithRange:NSMakeRange(i,1)];


        //need to compare the substring to characterset here

    }
}

私も2つのキャラクターセットを持っています

 setOne = [[NSCharacterSet characterSetWithCharactersInString:@"EAIONRTLSU"]invertedSet];

 setTwo = [[NSCharacterSet characterSetWithCharactersInString:@"DG"] invertedSet];

比較の部分で少し迷っています。「rangeOfCharacterFromSet」などのさまざまな方法を試しましたが、エラーが発生し続けました。疑似コードでは、次のようなものが必要です

if (setOne containsCharacterFrom substring) {

//do stuff here

} else if (setTwo containsCharacterFrom substring) {

//do other stuff here

}
4

2 に答える 2

1

セットの 1 つに「substring」変数があるかどうかを確認するには、次のようにします。

if ([substring rangeOfCharacterFromSet:setOne].location != NSNotFound) {
    // substring is in setOne
} else if ([substring rangeOfCharacterFromSet:setTwo].location != NSNotFound) {
    // substring is in setTwo
}

別のオプションは、キャラクターを操作することです。

for (int i = 0; i<[word length]; i++) {
    unichar ch = [word characterAtIndex:i];

    if ([setOne characterIsMember:ch]) {
        // in setOne
    } else if ([setTwo characterIsMember:ch]) {
        // in setTwo
    }
}

2 番目のオプションには 1 つの大きな制限があります。0xFFFF より大きい Unicode 文字では機能しません。

于 2012-10-15T15:42:51.020 に答える
1

unichar文字列から各文字 ( )を抽出し、次[NSCharacterSet characterIsMember:]のいずれかの一部であるかどうかを判断するために使用する必要がありますNSCharacterSet

- (void) compareCharactersOfWord: (NSString *)word
{
    // These could be initialised globally to speed things up a little...
    NSCharacterSet *setOne = [[NSCharacterSet characterSetWithCharactersInString:@"EAIONRTLSU"] invertedSet];
    NSCharacterSet *setTwo = [[NSCharacterSet characterSetWithCharactersInString:@"DG"] invertedSet];

    for (NSUInteger index = 0; index < [word length]; index++)
    {
        unichar c = [word characterAtIndex:index];
        if ([setOne characterIsMember:c])
        {
            // c is a member of character set #1
        }
        else if ([setTwo characterIsMember:c])
        {
            // c is a member of character set #2
        }
        else
        {
            // c is a member of neither character set
        }
    }
}
于 2012-10-15T15:39:52.540 に答える