Título: Identificar frases palíndromas Publicado por: AxelP en 15 Noviembre 2014, 06:10 am Hola a todos, tengo que hacer un programa que identifique las frases palíndromas. Tengo este código, pero falla en el if al comprobar la cadena con la cadena invertida:
Código: #include <stdio.h> Título: Re: Identificar frases palíndromas Publicado por: Ocelot1994 en 15 Noviembre 2014, 14:52 pm Prueba a cambiar esto :
-Con esto comprobamos letra por letra en la frase2. Código si el while sale porque fin e inicio son iguales es que es palindromo y tirara por el if, si no se cumple la igualdad de las letras tirara por el else y no será palindromo Código
Título: Re: Identificar frases palíndromas Publicado por: engel lex en 15 Noviembre 2014, 15:05 pm no puedes comprobarlo directamente porque los array de char son mas largos que las palabras que evaluas...
yo haría algo como Código
Título: Re: Identificar frases palíndromas Publicado por: leosansan en 15 Noviembre 2014, 20:33 pm Hola a todos, tengo que hacer un programa que identifique las frases palíndromas. Tengo este código, pero falla en el if al comprobar la cadena con la cadena invertida: En esencia la idea está bien pero mal implementada: * Al usar "strrev(frase2)" de forma automática la frase 2 queda invertida y lógicamente es siempre igual a si misma. * Lo anterior lleva al uso de una tercera cadena para guardar frase1 igual a frase2: Código
y a continuación no hay más que comparar frase3 con frase2 invertida. * Pero ahí viene el otro error grave que tienes que es comparar en el if dos cadenas con "==" cuando eso en C no es válido. Para ello has de usar "strcmp": Código
Con esas correcciones tu código es totalmente funcional. Aunque las otras ideas que te han dado son más "chachis". P.D:Te falta el "return" de main. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Identificar frases palíndromas Publicado por: AxelP en 15 Noviembre 2014, 23:33 pm Les agradezco mucho a todos, ahora ya pude comprender mejor como lo hace ;-)
Solo tengo una duda en la respuesta de leosansan, el código funciona, pero ¿Por qué le restas 1 en la parte de frase3[letra2 - 1]? Eso es lo único que no entiendo, y repito muchas gracias a todos. * Lo anterior lleva al uso de una tercera cadena para guardar frase1 igual a frase2: Código
Título: Re: Identificar frases palíndromas Publicado por: rir3760 en 16 Noviembre 2014, 02:31 am Solo tengo una duda en la respuesta de leosansan, el código funciona, pero ¿Por qué le restas 1 en la parte de frase3[letra2 - 1]? Eso es lo único que no entiendo Es debido al uso del operador secuencial ",". Su comportamiento dada la expresión:Código
Es el siguiente: 1) Se evalúa la expresión a la izquierda, esta es "frase2[letra2++] = frase1[letra1]" y su resultado se descarta. 2) Todos los efectos laterales del paso 1 se aplican: el valor de la variable "letra2" se incrementa en una unidad. 3) Se evalúa la expresión a la derecha, esta es "frase3[letra2 - 1] = frase1[letra1]". El punto importante aquí es que el valor de "letra2" ya se incremento en una unidad y ahora es el indice del siguiente carácter, por ello se le resta una unidad. Ya que la idea es copiar la cadena en dos arrays otra opción mas sencilla y con el mismo efecto es: Código
Un saludo Título: Re: Identificar frases palíndromas Publicado por: AxelP en 16 Noviembre 2014, 06:35 am Muchas gracias :D ;-)
Ahora entiendo por qué es, y que tu ejemplo es lo mismo, creo que ya comprendo perfectamente el código, muchas gracias rir3760 y también a todos los demás, ya pude entender y hacer mi tarea :D Título: Re: Identificar frases palíndromas Publicado por: leosansan en 16 Noviembre 2014, 14:05 pm ...................................... Ya que la idea es copiar la cadena en dos arrays otra opción mas sencilla y con el mismo efecto es: Código ......................... Incluso más sencillo: Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Identificar frases palíndromas Publicado por: rir3760 en 16 Noviembre 2014, 16:13 pm Incluso más sencillo: Código
No porque el operador de asignación no garantiza un punto de secuencia y por ende en la expresión: Código Se corre el riesgo de que la expresión A se evalue y su efecto lateral se aplique antes que la evaluación de la expresión B. Un caso similar que se utiliza para explicar el punto y que por supuesto no se recomienda es: Código Debido a que el resultado de la expresión depende del orden de evaluación de los operandos y el momento exacto de la aplicación de los efectos laterales (algo que no define el lenguaje). Un saludo |