// segun esto imprime la palabra pero alrevez , y hay error y no tengo idea de cual es el error , o si hay una manera más facil . mil gracias
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
void invierte(char*,char*,int);
int main(int a,char*argv[])
{
char palabra[]="javier";
char*invertida = (char*)malloc(sizeof(palabra));
invierte(palabra, invertida, strlen(palabra)-1);
printf("%s",invertida);
return 0;
}
void invierte ( char*p,char*i,int k)
{
*i++ = p[k];
if(!(k--<0)) invierte(p,i,k);
}
Cita de: mikany en 6 Febrero 2017, 20:12 PM
#include <stdio.h>
#include <stdlib.h>
Necesitas los espacios correctos en las librerias, la de conio.h no la necesitas.
No le veo error alguno.
Cuál es el problema??
Para hacerlo de tu forma me gusta más una solución iterativa. En cambio para escribir una frase al revés esta solución recursiva es muy elegante:
#include <stdio.h>
void invierte(char *c) {
if(*c)
invierte(c+1);
putchar(*c);
}
int main() {
invierte("Hola, soy una cadena");
}
Mira, siguiendo con la misma idea:
void invierte ( char*p, char*i, int k) {
if(*p && k)
invierte(p+1, i, k-1);
i[k] = *p;
}
Al final sí tiene una solución elegante recursiva :D
if(!(k--<0)) invierte(p,i,k);
Revisa y corrige lo anterior. Está mal. Si no ves el error estudia sobre predecrementos y postdecrementos.