2010-09-27 271 views
1

嘿,伙计们,下面是我用于学校作业的一段代码。 每当我输入一个单词,并在其中(它是一个大写字母o),它就会失败! 当程序中有一个或多个大写字母O时,它会返回false并记录:句子不是回文。奇怪的可可错误?

对于不知道回文是什么的人来说,一个回文是一个从右向左读的词。 (例如哈哈,皮划艇,reviver等) 当我试图检查有史以来发现的'最古老的'回文时发现了这个错误:SATOR AREPO TENET OPERA ROTAS。

当我将所有的大写字母o改为小写字母o时,它会起作用,并返回true。 让我清楚地说明,用这段代码所有句子/单词大写O的返回都是错误的。单个资本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]; 
} 

那么,这是可可中的一些奇怪的错误? 或者我错过了什么?

+1

您是否尝试过通过调试器步进?你可以发布一个例子的输出吗? – mkb 2010-09-27 13:44:21

+0

只是想知道(所以我可以自己测试这个),'position'代表什么? – Joshua 2010-09-27 17:47:26

+0

当第一次调用函数的位置应为0时,函数在每次增加位置的同时执行一些递归。 – 2010-09-28 07:38:10

回答

4

当然这不是在可可的错误,因为你可能知道内心深处。

你的比较方法导致了'Cocoa中的错误',你正在比较charOne和charTwo的地址。相反,您应该将字符串的内容与isEqualToString消息进行比较。

用途:

if(![charOne isEqualToString:charTwo]) { 

相反的:

if(charOne != charTwo) { 

编辑:在一个测试项目测试它,可以确认这就是问题所在。

+0

当然,我知道这并不是一个可可中的错误,我只是好奇这个问题是什么。我的意思是,为什么这只发生在人均收入而不是其他信件上呢?乍一看,代码看起来很好。我知道Java例如有一个.Equals方法,我直接在Cocoa中查找。但现在它在这里马上就对它进行测试! – Craimasjien 2010-09-27 15:34:05

+0

2010-09-27 17:37:44.898 ADS Practicum 2 [447:a0f]检查Palindrome 2010-09-27 17:37:44.899 ADS Practicum 2 [447:a0f] SATOR AREPO TENET OPERA ROTAS是一个回文。看起来像它工作:)谢谢人们! – Craimasjien 2010-09-27 15:38:09

+0

当我在测试项目中运行代码时,例如无法获得“aza”验证。并且它没有大写字母O. – 2010-09-28 07:36:38