[C con Clase] recursividad

marcelinux marcelinator en gmail.com
Mie Mar 23 11:31:50 CET 2016


El pasado 2016-03-22 17:20:50, yolmer escribió:
 
y> marcelinux gracias por tu aporte... pero es un ejercicio de "recursividad"
y> no tiene ninguna gracia hacerlo iterativo. de cualquier forma te agradezco
y> mucho

En efecto. Por eso he incluído la segunda función: invertir_con_recursividad_1
También necesito tres parámetros, pero distintos a los tuyos ;-)

He probado tu solución con esta invocación y me devuelve una cadena de mayor tamaño, y por tanto, con basura al inicio.
int main(int argc, char *argv[]) {
	if (argc > 1) {
		char *inv = new char[strlen(argv[1])];
		char *aux = new char[strlen(argv[1])];
		char *cad = new char[strlen(argv[1])];
		strcpy(cad, argv[1]);
		inv = voltea(cad, inv, aux);
		std::cout << "La cadena original :" << cad << std::endl;
		std::cout << "La cadena invertida:" << inv << std::endl;
	}
	std::cout << "Fin." << std::endl;
	return 0;
}

El resultado es:
La cadena original :caso
La cadena invertida:════²²²²♠osac
Fin.

Aparte de eso, con strcpy(&aux[i],&cad[i]);
estás copiando las direcciones de un caracter de cada cadena (si no me equivoco)

Y strcpy(&aux[i],"\0");
creo que no es lo correcto. Debería ser como lo tienes en la siguiente función, con cad[sz+1] = '\0';

Otro detalle importante es: if (i = tam)
Estás asignando tam a i, en lugar de compararlos: if (i == tam)

Siguiéndolo por debug me he dado cuenta de estas cositas.
Espero que te ayude en algo.


Más información sobre la lista de distribución Cconclase