Iphone NSString中字符的索引

Iphone NSString中字符的索引,iphone,objective-c,nsstring,Iphone,Objective C,Nsstring,我有NSString*string=@Helo;和NSString*editedString=@Hello;。例如,如何查找已更改字符的索引是@l。开始遍历一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。开始检查一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。您

我有NSString*string=@Helo;和NSString*editedString=@Hello;。例如,如何查找已更改字符的索引是@l。

开始遍历一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。

开始检查一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。

您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。

您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。

我已经在NSString上编写了一个类别,它可以满足您的需要。我使用了我的StackOverflow用户名作为category方法的后缀。这是为了阻止将来可能与同名方法发生的不太可能的冲突。请随意改变它

首先是接口定义NSString+Difference.h:


我已经在NSString上编写了一个类别,它可以满足您的需要。我使用了我的StackOverflow用户名作为category方法的后缀。这是为了阻止将来可能与同名方法发生的不太可能的冲突。请随意改变它

首先是接口定义NSString+Difference.h:


这是一个想法,但我认为这是一个简单的方法,或者不是?简单的方法是使用NSString类中的一个方法来实现这一点,这在内部将使用相同的策略。不幸的是,这个方法不存在,所以你必须自己编写。这是一个简单的方法,任务不是很复杂。这是一个想法,但我认为这是一个简单的方法,还是不?简单的方法是使用NSString类中的一个方法来实现这一点,它在内部将使用相同的策略。不幸的是,这个方法不存在,所以你必须自己写。这是一个简单的方法,任务不是很复杂。你不仅用不同的方式重写了我的答案,而且你也考虑过这个问题。如果两个字符串都为nil,那么length==0,表示位置0是它们不同的位置。如果调用方法的字符串为nil,则我的方法将返回0,这是正确的。它不需要两个字符串都为nil。在这种情况下,您无能为力,因为发送给nil的消息将不会返回任何内容。版本的问题是,如果两个字符串的词干相同,但其中一个比另一个长,则返回-1。我试图帮助你修正你的版本,但我认为你让它变得更糟,所以我用我自己的答案介入。如果你觉得我偷了你的答案,我很抱歉。还有,你有一个无关的“;”您不应该打印出一个长整数%l如果您所指的无关分号是方法名称末尾的分号,那么它是完全有效的Objective-C。至于%ld,我在Mac上编写并测试了这个类别,而不是在iOS上,其中NSInteger是64位的。%ld将在NSInteger只有32位的iOS上运行良好。不过,分号可以编译并运行。这是没有目的的,也绝对没有理由这样做。%ld将引起编译器警告,那么为什么不只是%d呢?您不仅确实以不同的方式重写了我的答案,而且还考虑过这一点。如果两个字符串都为nil,那么length==0,表示位置0是它们不同的位置。如果调用方法的字符串为nil,则我的方法将返回0,这是正确的。它不需要两个字符串都为nil。在这种情况下,您无能为力,因为发送给nil的消息将不会返回任何内容。版本的问题是,如果两个字符串的词干相同,但其中一个比另一个长,则返回-1。我试图帮助你修正你的版本,但我认为你让它变得更糟,所以我用我自己的答案介入。如果你觉得我偷了你的答案,我很抱歉。还有,你有一个无关的“;”您不应该打印出一个长整数%l如果您所指的无关分号是方法名称末尾的分号,那么它是完全有效的Objective-C。至于%ld,我在Mac上编写并测试了这个类别,而不是在iOS上,其中NSInteger是64位的。%ld将在NSInteger只有32位的iOS上运行良好。不过,分号可以编译并运行。这是没有目的的,也绝对没有理由这样做。%ld将导致编译器警告,为什么不只是%d?
#import <Foundation/Foundation.h>

@interface NSString (Difference)

- (NSInteger)indexOfFirstDifferenceWithString_mttrb:(NSString *)string;

@end
#import "NSString+Difference.h"

@implementation NSString (Difference)

- (NSInteger)indexOfFirstDifferenceWithString_mttrb:(NSString *)string; {

    // Quickly check the strings aren't identical
    if ([self isEqualToString:string]) 
        return -1;

    // If we access the characterAtIndex off the end of a string
    // we'll generate an NSRangeException so we only want to iterate
    // over the length of the shortest string
    NSUInteger length = MIN([self length], [string length]);

    // Iterate over the characters, starting with the first
    // and return the index of the first occurence that is 
    // different
    for(NSUInteger idx = 0; idx < length; idx++) {
        if ([self characterAtIndex:idx] != [string characterAtIndex:idx]) {
            return idx;
        }
    }

    // We've got here so the beginning of the longer string matches
    // the short string but the longer string will differ at the next
    // character.  We already know the strings aren't identical as we
    // tested for equality above.  Therefore, the difference is at the
    // length of the shorter string.

    return length;        
}

@end
NSString *stringOne = @"Helo";
NSString *stringTwo = @"Hello";

NSLog(@"%ld", [stringOne indexOfFirstDifferenceWithString_mttrb:stringTwo]);