Pues eso, quiero invertir una cadena de caracteres, no me sale del todo correcto, esto es lo que he hecho. Una ayuda por favor.
#include<ctype.h>
int main(void){
char cad[10];
printf("introduzca un nombre\n");
scanf("%s",cad);
printf("El nombre leido es: %s\n",cad);
char cadinv[10];
int i, temp, len,ultimo;
ultimo = strlen(cad) - 1;
for(i=0; i <= strlen(cad); i++){
temp = cadinv[i];
cadinv[i]=cad[ultimo - i];
cad[ultimo - i] = temp;
}
puts(cadinv);
system("pause");
return(0);
}
temp = cadinv[i];
cadinv[i]=cad[ultimo - i];
cad[ultimo - i] = temp;
¿Qué se supone que es ese código? por que le asignas a cad[ultimo - i] el valor de cadinv[ i ]
Esta es una solución posible:
#include<ctype.h>
#include <stdio.h>
#include <string.h>
const int TAM = 10;
int main(void){
char cad[TAM];
printf("introduzca un nombre\n");
scanf("%s",cad);
printf("El nombre leido es: %s\n",cad);
char cadinv[TAM];
int i, e;
for(i = strlen(cad)-1, e = 0; 0 <= i; i--, e++)
cadinv[e] = cad[i];
cadinv[e] = '\0';
printf("El nombre2 : %s\n",cadinv);
system("pause");
return(0);
}
Tienes que saber que el último elemento de la cadena es '\0' que indica el final, por eso si haces:
cadinv[0]=cad[strlen(cad)];
Asignas '\0' al primer elemento de la cadena lo que quiere decir que en la posición cero se cierra la cadena.
un error... siempre tiene que ser menor que strlen (porque el array empieza en 0)
segundo piensa el codigo que haces...
imagina que la cadena es "españa"
ciclo i=0:
e
aspaña
aspañe
i=1
s
añpañe
añpase
i=2
p
añaase
añapse ---aqui está listo
i=3
p
añaase
añpase
i=4
s
añpañe
aspañe
i=5
e
aspaña
españa
el codigo está casi bien... que le falta?
Gracias a todos por vuestras respuestas