Cita de: MAFUS en 29 Abril 2017, 11:23 AM
Muestra lo que llevas. A lo mejor los dos índices están bien y el problema está en otro sitio.
Aquí esta: https://pastebin.com/qnTQM6wD
Agradecería que facilitarais el código correcto.
Gracias y un saludo.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: MAFUS en 29 Abril 2017, 11:23 AM
Muestra lo que llevas. A lo mejor los dos índices están bien y el problema está en otro sitio.
CitarCuando copias frase2 a palin usas el mismo índice para los dos. Esto quiere decir que cuándo te saltas un signo de puntuación de los que has indicado en el if el contenido de palin en esa posición se quedará con un dato basura.
Cita de: MAFUS en 28 Abril 2017, 12:17 PM
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.
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main ()
{
char frase[50];
int n;
n=0;
printf("Escribir una frase:\n");
gets(frase);
if ((frase[n])!=(' '&','&'?'&'¿'&'!'&'¡'))
{
printf("%c", frase[n]);
}
}