Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: muymuyperdido en 2 Diciembre 2012, 18:12 pm



Título: Programa con cadenas
Publicado por: muymuyperdido en 2 Diciembre 2012, 18:12 pm
Hola, tengo un problema de cadenas, que es introducir dos, destino y original y me tiene que devolver el programa la destino copiada en la original pero con los caracteres al revés.
Es mi 2 programa con cadenas y me da varios errores, yo lo he planteado así pero probablemente haya hecho alguna barbaridad, gracias :)

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define TAM 200
  4. void cambio (char v[], char m[]);
  5. void main(){
  6. char destino[TAM];
  7. char original[TAM];
  8. printf("Introduzca la primera cadena");
  9. gets(destino);
  10. printf("Introduzca la segunda cadena");
  11. gets(original);
  12. cambio(destino[TAM],original[TAM]);
  13. puts(destino);
  14. puts(original);
  15. }
  16. void cambio (char v[], char m[]){
  17.    int i;
  18.    strcat(char destino[TAM],char original[TAM]);
  19.    for(i=0;v[i]!='\0';i++){
  20.        char destino[i]=char destino[TAM-i-1];}
  21.  
  22. }


Título: Re: Programa con cadenas
Publicado por: rir3760 en 2 Diciembre 2012, 18:54 pm
Lo primero que debe hacer es cambiar la definición de la función "main" y evitar el uso de "gets", por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

El error principal en tu programa son las llamadas a la función cambio y strcat (esta ultima innecesaria):
Código
  1. cambio(destino[TAM],original[TAM]);
Solo debes utilizar los nombres de los arrays, de esta forma:
Código
  1. cambio(destino, original);

Y la función que invierte la cadena esta mal implementada, debería ser mas o menos así:
Código
  1. void reverse(char *dst, char const *src)
  2. {
  3.   int i;
  4.  
  5.   /* Encontramos el final de la cadena original */
  6.   for (i = 0; src[i] != '\0'; i++)
  7.      ;
  8.  
  9.   /* Almacenamos el indicador de fin de cadena */
  10.   dst[i] = '\0';
  11.  
  12.   /* Copiamos los demas caracteres */
  13.   while (i-- > 0)
  14.      *dst++ = src[i];
  15. }
Funciona pero con una limitante importante: no verifica la capacidad de los contenedores (arrays), si la cadena original sobrepasa la capacidad del array de destino el programa ...

Un saludo


Título: Re: Programa con cadenas
Publicado por: leosansan en 2 Diciembre 2012, 19:02 pm
Sin usar funciones y con strcat:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define TAM 200
  4. void cambio (char v[], char m[]);
  5. int main(){
  6.    int i;
  7.    char destino[TAM];
  8.    char destino_reves[TAM];
  9.    char original[TAM];
  10.    printf("Introduzca la primera cadena destino:");
  11.    gets(destino);
  12.    printf("Introduzca la segunda cadena original:");
  13.    gets(original);
  14.    for(i=0;destino[i]!='\0';i++){
  15.             destino_reves[i]= destino[strlen(destino)-i-1];}
  16.    destino_reves[i]='\0';
  17.    strcat( original, destino_reves);
  18.    puts(original);
  19.    return 0;
  20. }
Sorry, se me ha adelantado rir mientras posteaba esto.Y  como siempre claro y preciso en sus explicaciones.
Saluditos!.