对于那些不知道回文是什么的人来说,回文是一个从右边和后面留下的同一个词。 (例如lol,皮划艇,复活等) 我在试图查看有史以来发现的“最古老的”回文时发现了这个错误:SATOR AREPO TENET OPERA ROTAS。
当我将所有大写o改为小写o时,它会起作用,并返回true。 让我清楚地说明,用这段代码,所有带有大写O的句子/单词都返回false。单个资本o足以使该计划失败。
-(BOOL)testForPalindrome:(NSString *)s position:(NSInteger)pos {
NSString *string = s;
NSInteger position = pos;
NSInteger stringLength = [string length];
NSString *charOne = [string substringFromIndex:position];
charOne = [charOne substringToIndex:1];
NSString *charTwo = [string substringFromIndex:(stringLength - 1 - position)];
charTwo = [charTwo substringToIndex:1];
if(position > (stringLength / 2)) {
NSString *printableString = [NSString stringWithFormat:@"De following word or sentence is a palindrome: \n\n%@", string];
NSLog(@"%@ is a palindrome.", string);
[textField setStringValue:printableString];
return YES;
}
if(charOne != charTwo) {
NSLog(@"%@, %@", charOne, charTwo);
NSLog(@"%i", position);
NSLog(@"%@ is not a palindrome.", string);
return NO;
}
return [self testForPalindrome:string position:position+1];
}
那么,这是Cocoa中的一些奇怪的错误吗? 或者我错过了什么?
答案 0 :(得分:4)
这当然不是Cocoa中的一个错误,因为你可能内心深处知道。
你的比较方法导致了这个'Cocoa中的错误',你正在比较charOne和charTwo的地址。相反,您应该将字符串的内容与isEqualToString消息进行比较。
使用:
if(![charOne isEqualToString:charTwo]) {
而不是:
if(charOne != charTwo) {
编辑:在测试项目中测试它并且可以确认这是问题。
答案 1 :(得分:3)
请勿使用charOne != charTwo
而是使用其中一个NSString Compare Methods.
if ([charOne caseInsensitiveCompare:charTwo] != NSOrderedSame)
有关