2010-09-27 311 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