Странная ошибка с какао? - PullRequest
1 голос
/ 27 сентября 2010

Привет, ребята, ниже приведен фрагмент кода, который я использовал для школьного задания.Всякий раз, когда я ввожу слово с буквой О (это заглавная буква О), оно терпит неудачу!Всякий раз, когда в этой программе есть одна или несколько заглавных О, она возвращает false и записывает: предложение, а не палиндром.

Палиндром, для людей, которые не знают, что такое палиндром, - это слово, которое является одним и тем же.читать слева направо и назад.(например, lol, kayak, reviver и т. д.) Я обнаружил эту ошибку при попытке проверить самый старый из когда-либо обнаруженных палиндромов: SATOR AREPO TENET OPERA ROTAS.

Когда я изменяю все заглавные o на строчные 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]; 
}

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

  • B

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

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

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

Использовать:

if(![charOne isEqualToString:charTwo]) {

Вместо:

if(charOne != charTwo) {

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

3 голосов
/ 27 сентября 2010

Не использовать charOne != charTwo

Вместо этого используйте один из методов сравнения NSString.

if ([charOne caseInsensitiveCompare:charTwo] != NSOrderedSame)

Это также может быть связано с локализацией (но я сомневаюсь в этом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...