Pregunta

Hola gente, por debajo es una pieza de código que he usado para una tarea escolar. Cada vez que entro en una palabra, con una junta en el mismo (que es una O mayúscula), se produce un error! Cada vez que hay una o más de capital O en este programa, devuelve registros falsos y:. Sentencia no un palíndromo

Un palíndromo, para las personas que no saben lo que es un palíndromo, es una palabra que es la misma lectura izquierda de la derecha, y hacia atrás. (Por ejemplo lol, kayak, resucitador etc) He encontrado este error cuando se trata de comprobar el 'más antiguo' palíndromo que se ha encontrado:. SATOR AREPO ÓPERA del PRINCIPIO ROTAS

Cuando cambio la totalidad del capital o de a minúsculas o de, funciona, y vuelve verdadera. Permítanme decir claramente, con este pedazo de código de todas las sentencias / palabras con falso retorno de capital de S. Un único de capital o es suficiente para fallar este programa.

-(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]; 
}

Por lo tanto, es esto algún extraño error en Cocoa? O me estoy perdiendo algo?

  • B
¿Fue útil?

Solución

Por supuesto, esto no es un error en Cocoa, como probablemente sabía muy dentro.

Su método compare está causando este 'fallo en Cocoa', que está comparando las direcciones de Charone y charTwo. En su lugar debe comparar el contenido de la cadena con el mensaje isEqualToString.

Uso:

if(![charOne isEqualToString:charTwo]) {

En lugar de:

if(charOne != charTwo) {

Editar:. Se probó en un proyecto de prueba y puede confirmar que este es el problema

Otros consejos

No utilice charOne != charTwo

lugar de utilizar uno de los NSString comparar los métodos.

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

También puede tener que ver con localización (aunque lo dudo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top