Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 23 Julio 2015, 01:15 AM

Título: Invertir cadena de caracteres EN C
Publicado por: estudiante_1 en 23 Julio 2015, 01:15 AM
 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);

}
Título: Re: Invertir cadena de caracteres EN C
Publicado por: ivancea96 en 23 Julio 2015, 01:49 AM
    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 ]
Título: Re: Invertir cadena de caracteres EN C
Publicado por: user-marcos en 23 Julio 2015, 01:54 AM
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.
Título: Re: Invertir cadena de caracteres EN C
Publicado por: engel lex en 23 Julio 2015, 01:59 AM
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?
Título: Re: Invertir cadena de caracteres EN C
Publicado por: estudiante_1 en 23 Julio 2015, 02:26 AM
Gracias a todos por vuestras respuestas