1

我知道我可以使用 characterAtIndex: 遍历两个 NSString 对象的每个字符并比较它们,但是如果我经常使用这个函数,这种方法会非常昂贵。

有没有为此内置的东西,或者更有效的方法?

4

2 回答 2

2

我能想到的最快方法是从中获取一个 C 字符串,然后遍历这些字符串。

只是一个简单的例子(根据你的喜好修复它):

const char* myCString = [myNSStringInstance UTF8String];
const char* string2 = [nsstring2 UTF8String];

// Assume same length. You can fix this
for(i = 0; i < strlen(myCString); i++) {
    if(myCString[i] != string2[i]) {
        // Do something here...
    }
}
于 2012-06-17T01:46:24.373 回答
0

这有点骇人听闻,但是您可以为每个获取 c 字符串,然后使用指针索引。与您提到的想法相同的基本算法,但理论上与您合理期望的解决方案一样有效(只需查看两个内存地址并比较它们的内容。

伪代码:

char *stringA = [stringA cStringUsingEncoding:NSUTF8StringEncoding];
char *stringB = [stringB cStringUsingEncoding:NSUTF8StringEncoding];
int mismatchIndex = -1;
for(int i = 0; i<shorterStringLength; i++) {
    if (stringA[i] != stringB[i]) {
        mismatchIndex = i;
        break;
    } 
}
于 2012-06-17T01:51:24.877 回答