Título: Programa para detectar palindromos Publicado por: Error 404: en 3 Septiembre 2014, 13:23 pm Hola a todos, antes de nada, ya se que saqué este hilo hace algún tiempo, pero sigo teniendo un problema al que no consigo darle la solución. El objetivo del programa que estoy intentando crear es que al introducir una cadena de caracteres, éste te diga si esa cadena es o no un palíndromo (que se lee igual de izquierda a derecha y de derecha a izquierda (ejemplo otto)).
He conseguido compilar el código sin que me salga ningún error ni ningún warning, sin embargo cuando lo ejecuto, al introducir la cadena, no hace nada :huh: Les dejo el código por si me pudieran ayudar. Gracias de antemano a todos. Código
Título: Re: Programa para detectar palindromos Publicado por: ivancea96 en 3 Septiembre 2014, 14:51 pm Hazlo haciendo que la variable 'j' sea strlen(cadena)-1.
Bueno, eso, y otros cambios que has de hacerle. Título: Re: Programa para detectar palindromos Publicado por: eferion en 3 Septiembre 2014, 15:02 pm Para las cadenas, usa la clase string en vez de char*:
Código
Además, te complicas demasiado la forma de recorrer la cadena: Código
sizeof(cadena) te va a dar 100... realmente tiene 100 caracteres tu cadena???, no verdad?? Código
O si estás haciendo uso de la clase string: Código
Por otro lado, haces un uso un tanto complicado de la variable 'n': * No la inicializas al principio... eso es peligroso * Solo va a tener dos posibles estados... mejor declararla como bool * Poner nombres significativos a las variables facilita la lectura y mantenimiento del código. Código
Aún con todo, insisto, hay formas más sencillas de hacer esto. Por ejemplo copiar la cadena invertida en otro buffer (o en otra instancia de tipo string) y comparar ambas cadenas (con strcmp o con el operador == según el caso )... si son iguales entonces hay palíndromo: Código
PD.: Este es mi mensaje nº 1.000 yuhuuuu XDDD Título: Re: Programa para detectar palindromos Publicado por: vk496 en 3 Septiembre 2014, 17:56 pm Me ha intrigado tu propuesta, y me puse a hacerlo... pero en Bash (no domino el C/C++)
Código
Espero que te sirva Salu2 Título: Re: Programa para detectar palindromos Publicado por: rir3760 en 3 Septiembre 2014, 18:06 pm Además, te complicas demasiado la forma de recorrer la cadena: Ya que todo parámetro declarado como "T [N]" se procesa en realidad como "T *" el resultado de "sizeof(cadena)" sera igual a "sizeof(char *)". Por supuesto no deja de ser un error y hay que cambiar la aproximación a, como sugieres, el uso de la función strlen.Código
sizeof(cadena) te va a dar 100 En el caso de cadenas "a la C" una aproximación en la misma linea mas propia de C que de C++ es: Código
Un detalle a tener en cuenta es que no hay protección en caso de una cadena vacía (solo el cero), en ese caso daría resultados incorrectos. Un saludo Título: Re: Programa para detectar palindromos Publicado por: Error 404: en 3 Septiembre 2014, 18:08 pm vk496 me temo que no se absolutamente nada de Bash :-\ pero gracias por la respuesta y me alegro que te resulte interesante mi propuesta :rolleyes:
Eferion, he seguido algunos de tus consejos, y ahora me avisa de cuando es un palíndromo, pero si pongo una cadena/palabra que no lo es no me dice nada. He conseguido avanzar a que me diga cuando sí lo es, pero no consigo hacer que me diga cuando no. Antes de ponerte el código actual, decirte que estoy siguiendo un manual pues aún no se mucho (como habrás notado), por eso no he usado el último consejo que me has dicho, pues aún no he llegado a eso, y la clase string, me temo que tampoco la he dado aún. Bueno, dejo el código actual, para ver si alguien ve mi fallo, agradezco mucho las respuestas de verdad, aunque me gustaría que no solo me digáis lo que debo poner o quitar, sino que me intentéis explicar más o menos. el por qué falla como lo tengo, para así saber porque no funciona y evitar que ese fallo me suceda en más ocasiones. rir3760 la verdad es que no se qué es size_t,´soy bastante nuevo y solo sé lo que he estudiado en el manual que leo, y no he visto nada de eso, por lo que no he entendido nada :huh: :huh: :huh: Dicho esto.. Código
Vale, ya me he dado cuenta del error, el fallo estaba en la línea 57 Código
No es eso lo que debo poner, sino Código
Al hacer ese pequeño cambio ya funciona todo correctamente, aunque si alguien me pudiera explicar por qué no hacía nada, porque entiendo que diera fallo, pero no que no saliera nada :huh: Título: Re: Programa para detectar palindromos Publicado por: rir3760 en 5 Septiembre 2014, 21:34 pm Porque "palindromo" es un puntero y cuando estos se convierten a booleanos los distintos de NULL resultan en true y los iguales en false, tu bucle se procesa de esta forma:
Código
Los resultados del operador && en los dos casos que nos importan son: Código: false && true ==> false Como puedes ver (en este caso en particular) el segundo operando no importa, el resultado solo lo decide el primero, tenemos: Código
Por eso, si los caracteres a comparar en cualquier momento son distintos, se entra en un bucle infinito: para terminar se debe modificar el valor de los contadores "i" y "j" pero la rama de ejecución donde ello se realiza nunca se ejecuta. Un saludo Título: Re: Programa para detectar palindromos Publicado por: Error 404: en 6 Septiembre 2014, 09:37 am ah, creo que lo he entendido, gracias rir3760, y a todos por la ayuda ;-)
|