Para este caso la función de la biblioteca estándar isalpha te va muy bien.
Con el siguiente código lo comprenderás.
Sea
frase la frase a operar,
i y
j los índices del inicio de la frase y final de frase respectivamente:
for(i = 0, j = strlen(frase); j >= i; ++i, --j) {
if(!isalpha(frase[i]))
++j;
else if(!isalpha(frase[j]))
--i;
else if(tolower(frase[i]) != tolower(frase[j]))
break;
}
Cómo funciona:
sabemos que al final de cada bucle i aumentará y j disminuirá por tanto si el caracter en i no es una letra lo debemos descartar. Eso lo hará el bucle automáticamente cuando llegue al final pero debemos impedir que j no se mueva. Cómo ya hemos dicho que al final j va a disminuir en una unidad vamos a tener que incrementarlo en una unidad para que en la próxima iteración se quede igual (apuntando al mismo caracter.
El funcionamiento de j para i es similar.
Cuando el bucle ya compara dos caracteres si son iguales pasa a la próxima iteración, si son diferentes quiere decir que la frase no es palíndromo y para el bucle con break.
Lo que nos dará si la frase es palíndromo será mirar si j es diferente a la mitad del tamaño de la frase menos 1.
Buenos días;
Te comento lo mismo que le he dicho al usuario @mester más arriba; la finalidad de mi código no es la de decir si una
palabra es palindroma o no, sino decir si una
frase es palindroma o no.
Mi código quita todos las comas, puntos, espacios y demás signos de la frase. Después, pasa a comprobar si es palindroma esa palabra que ha formado.
Ejemplo: Arde ya la yedra!
1º paso; lo convierte de una frase a una palabra: ardeyalayedra
2º paso, comprueba si es palibroma esa palabra.
Las 2 partes funcionan sin problema por separado pero al juntarlas no.
Agradecería mucho que alguien encontrara
el error de mi código.
Un Saludo