Título: Ayuda recursividad Publicado por: JUHC en 28 Julio 2016, 11:25 am Escribir una funcion recursiva en c++ que a partir de una cadena de caracteres me muestre la cadena inversa y elimine las letras repetidas. Por ejemplo si introduzco : aacbbd, deberia de mostrar :dbca
Título: Re: Ayuda recursividad Publicado por: avesudra en 28 Julio 2016, 11:53 am ¿Y qué llevas hecho?
Un saludo. Título: Re: Ayuda recursividad Publicado por: JUHC en 28 Julio 2016, 12:41 pm ¿Y qué llevas hecho? Un saludo. #include <iostream> #include <string.h> #include<string> using namespace std; char InversoSimplificado(char c, int tam); int main() { char c[20]; int tam; cout << "Introduce una cadena: "; cin>>c; tam=strlen(c); //TAMAÑO DE LA CADENA cout<<endl<<endl; cout<< "La cadena invertida y sin repeticiones es: "<< InversoSimplificado(c,tam); return 0; } char InversoSimplificado (char c ,int tam){ // CONDICION DE PARADA PARA INVERTIR PALABRA: if (tam==1) // LLAMADA RECURSIVA PARA INVERTIR PALABRA: return InversoSimplificado (c, tam-1) + (c, 1); } Título: Re: Ayuda recursividad Publicado por: avesudra en 28 Julio 2016, 12:46 pm Empecemos por lo más simple, si necesitas invertir una cadena ¿por qué declaras y defines la función pasando y devolviendo un único carácter?
Código
En todo caso sería: Código
Por otra parte: Código
¿Qué intentas hacer con lo que está entre interrogaciones? Título: Re: Ayuda recursividad Publicado por: Yoel Alejandro en 6 Agosto 2016, 00:27 am Hola avesudra. Bueno, ya que piden resolverlo con recursividad, se me ocurre crear dos funciones, una para eliminar los caracteres repetidos, y otra para invertir la cadena.
Por ejemplo, sea la cadena "aaaabbbcccddddeee", entonces la idea es que cada vez que llamemos la función se elimina una repetición. La función compara el primer carácter de la cadena con el segundo, si son iguales elimina la repetición de este carácter y se vuelve a llamar a sí misma. Tras esto, compara el segundo con el tercero y así sucesivamente. Entonces tras la primera ejecución devuelve "abbbcccddddeee", tras la segunda devuelve "abcccddddeee", y así sucesivamente. La función se ha codificado de manera que imprima los resultados parciales y así se pueda ver cómo va trabajando. En cuánto a la parte de invertir la cadena, lo que hacemos es intercambiar los caracteres opuestos con respecto al centro, desde afuera hacia adentro. Por ejemplo, dada la cadena "abcde", intercambiamos 1º y 5º, luego 2º y 4º y así sucesivamente. El proceso se detiene cuando la cantidad de reordenamientos supera la mitad de la longitud de la cadena. Código
Aquí podemos ver el resultado: Eliminando repetidos ============================== abbbcccddddee abcccddddee abcddddee abcdee abcde Invirtiendo cadena ============================== ebcda edcba Un saludo, Yoel. Título: Re: Ayuda recursividad Publicado por: user-marcos en 6 Agosto 2016, 01:07 am Código
Título: Re: Ayuda recursividad Publicado por: do-while en 6 Agosto 2016, 01:57 am ¿Y no es más fácil hacer lo siguiente?
Código
O si lo preferís con subindices... Código
A fin de cuentas lo que le piden es una función recursiva que muestre la cadena invertida y sin repeticiones. Que la muestre. No que la almacene en ningún lado. Título: Re: Ayuda recursividad Publicado por: Yoel Alejandro en 6 Agosto 2016, 03:04 am Supongo que la debo utilizar de esta manera, ¿no?
Código
Título: Re: Ayuda recursividad Publicado por: Yoel Alejandro en 6 Agosto 2016, 21:34 pm La idea de do-while es interesante, yo la adapté de la siguiente manera para crear un código más breve. La idea es empezar por el último carácter (no nulo) de la cadena y comparar con el siguiente. Si son diferentes, imprimir, sino, retroceder un carácter. En la función
Código start es un apuntador al inicio de la cadena (para saber cuando detenernos al retroceder), c_ptr es un apuntador al carácter actualmente analizado (empezando por el último). La variable interna c funciona como auxiliar para almacenar el valor del carácter siguiente al apuntado por c_ptr. Programa principal: Código
Salida en pantalla: Intro cadena: aaabbbccdddeeee Salida:edcba Título: Re: Ayuda recursividad Publicado por: JUHC en 8 Agosto 2016, 10:13 am ¿Y no es más fácil hacer lo siguiente? Código
A fin de cuentas lo que le piden es una función recursiva que muestre la cadena invertida y sin repeticiones. Que la muestre. No que la almacene en ningún lado. Me puedes explicar que es lo que hace ? :) Título: Re: Ayuda recursividad Publicado por: AlbertoBSD en 8 Agosto 2016, 16:41 pm Dejo los comentarios de que hace entre comillas, el codigo es del usuario do-while
Código
Y solo me queda comentar que el código proporcionado por el usuario do-while es, a mi punto de vista una verdadera pieza maestra!!! Muestra un gran nivel del uso del lenguaje ;-) ;-) ;-) ;-) ;-) Saludos! |