[C con Clase] recursividad
marcelinux
marcelinator en gmail.com
Mar Mar 22 17:04:41 CET 2016
El pasado 2016-03-20 11:07:07, yolmer escribió:
y> En otro orden de ideas para resolver el ejercicio tuve que crear un par de
y> funciones más una para truncar la cadena y otra para añadir un caracter,
Ya que has propuesto una solución, me atrevo a ofrecer mi versión.
No es como Salvador propone.
De hecho, primero se me ocurrió sin recursividad, con un simple for.
Después lo intentaré con su sugerencia y mostraré el resultado aquí.
// Dada una cadena, invertir el orden de sus caracteres.
#include <iostream>
void invertir_con_for(char *cad);
void invertir_con_recursividad_1(char *ori, char *des, int pos);
int main(int argc, char *argv[])
{
if (argc > 1) {
std::cout << "La cadena a invertir es:" << argv[1] << std::endl;
char *cadena = new char[strlen(argv[1])];
std::strcpy(cadena, argv[1]);
invertir_con_for(cadena);
std::cout << "Y la invertida, mediante un bucle for, es:" << cadena << std::endl;
std::strcpy(cadena, argv[1]);
char *nuevacadena = new char[strlen(argv[1])];
nuevacadena[strlen(argv[1])] = '\0';
invertir_con_recursividad_1(cadena, nuevacadena, 0);
std::cout << "Y la invertida, mediante recursividad, es:" << nuevacadena << std::endl;
//delete cadena;
}
std::cout << "Fin." << std::endl;
return 0;
}
void invertir_con_for(char *cadena) {
char *tmp = new char[strlen(cadena)];
std::strcpy(tmp, cadena);
int j = 0;
for (int i = strlen(cadena) - 1; i > -1; i--) {
cadena[j++] = tmp[i];
}
cadena[j] = '\0';
//delete tmp;
}
void invertir_con_recursividad_1(char *origen, char *destino, int posicion) {
int l_cad = strlen(origen);
if ( posicion < l_cad) {
destino[posicion] = origen[l_cad - posicion -1];
invertir_con_recursividad(origen, destino, ++posicion);
}
}
:">
Más información sobre la lista de distribución Cconclase