Iphone NSString中字符的索引
我有NSString*string=@Helo;和NSString*editedString=@Hello;。例如,如何查找已更改字符的索引是@l。开始遍历一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。开始检查一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。我已经在NSString上编写了一个类别,它可以满足您的需要。我使用了我的StackOverflow用户名作为category方法的后缀。这是为了阻止将来可能与同名方法发生的不太可能的冲突。请随意改变它 首先是接口定义NSString+Difference.h:Iphone NSString中字符的索引,iphone,objective-c,nsstring,Iphone,Objective C,Nsstring,我有NSString*string=@Helo;和NSString*editedString=@Hello;。例如,如何查找已更改字符的索引是@l。开始遍历一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。开始检查一个字符串,并将每个字符与另一个字符串中相同索引处的字符进行比较。比较失败的地方是更改字符的索引。您可以使用-rangeOfString:。例如,[string rangeOfString:@l].location。该方法也有几种变体。您
我已经在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]);