Foro de elhacker.net

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.



Código:
#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
Código
  1.    temp = cadinv[i];
  2.    cadinv[i]=cad[ultimo - i];
  3.    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:

Código
  1. #include<ctype.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. const int TAM = 10;
  6. int main(void){
  7.  char cad[TAM];
  8.  printf("introduzca un nombre\n");
  9.  scanf("%s",cad);
  10.  printf("El nombre leido es: %s\n",cad);
  11.  char cadinv[TAM];
  12.  
  13.  int i, e;
  14.  for(i = strlen(cad)-1, e = 0; 0 <=  i; i--, e++)
  15.      cadinv[e] = cad[i];
  16.   cadinv[e] = '\0';
  17.    printf("El nombre2 : %s\n",cadinv);
  18.  
  19.  
  20.  system("pause");
  21.  return(0);
  22.  
  23. }
  24.  

Tienes que saber que el último elemento de la cadena es '\0' que indica el final, por eso si haces:
Código
  1. cadinv[0]=cad[strlen(cad)];
  2.  
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"

Código:
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