奇怪的可可虫?

时间:2010-09-27 13:26:30

标签: objective-c cocoa palindrome

嘿大家,下面是我用于学校作业的一段代码。 每当我输入一个单词,其中有一个O(这是一个大写o),它就会失败! 只要这个程序中有一个或多个大写字母O,它就会返回false并记录:句子不是回文。

对于那些不知道回文是什么的人来说,回文是一个从右边和后面留下的同一个词。 (例如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中的一些奇怪的错误吗? 或者我错过了什么?

2 个答案:

答案 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)

它也可能与localization (but I doubt it).

有关