2010-09-27 2 views
1

Эй, люди, внизу - часть кода, которую я использовал для школьного задания. Всякий раз, когда я ввожу слово, с O в нем (который является столицей o), он терпит неудачу! Всякий раз, когда в этой программе есть один или несколько капитала O, он возвращает false и logs: предложение не палиндром.Странная ошибка какао?

Палиндром для людей, которые не знают, что такое палиндром, - это слово, которое читается слева направо и назад. (например, lol, kayak, reviver и т. д.) Я нашел эту ошибку при попытке проверить «самый старый» палиндром, когда-либо найденный: 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]; 
} 

Итак, это какая-то странная ошибка в какао? Или я что-то упускаю?

  • B
+1

Вы пробовали пошаговый отладчик? Можете ли вы опубликовать некоторые примеры из примера? – mkb

+0

Просто интересно (так что я могу проверить это сам), что означает 'позиция'? – Joshua

+0

При первом вызове функции позиция должна быть 0, после чего функция выполняет некоторую рекурсию, одновременно увеличивая позицию. –

ответ

4

Это, конечно, это не ошибка в какао, как вы, вероятно, знал, что глубоко внутри.

Ваш метод сравнения вызывает эту ошибку в Cocoa, вы сравниваете адреса charOne и charTwo. Вместо этого вы должны сравнить содержимое строки с сообщением isEqualToString.

Использование:

if(![charOne isEqualToString:charTwo]) { 

Вместо:

if(charOne != charTwo) { 

Edit: тестировал в тестовом проекте и может подтвердить, что это проблема.

+0

Конечно, я знал, что это действительно не ошибка в какао, мне было просто любопытно, в чем проблема. Я имею в виду, почему это происходит только на душу, а не на других письмах? На первый взгляд код казался полным. Я знал, что Java, например, имеет метод .Equals, который я считаю непосредственно в Cocoa. Но теперь это сейчас плохое испытание! – Craimasjien

+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

+0

Когда я запускал ваш код в тестовом проекте, я не мог получить «аза» для проверки, например. И он не имеет капитала O. –

Смежные вопросы