Test Foro de elhacker.net SMF 2.1

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 :)

#include <stdio.h>
#include <string.h>
#define TAM 200
void cambio (char v[], char m[]);
void main(){
char destino[TAM];
char original[TAM];
printf("Introduzca la primera cadena");
gets(destino);
printf("Introduzca la segunda cadena");
gets(original);
cambio(destino[TAM],original[TAM]);
puts(destino);
puts(original);
}
void cambio (char v[], char m[]){
    int i;
    strcat(char destino[TAM],char original[TAM]);
    for(i=0;v[i]!='\0';i++){
        char destino[i]=char destino[TAM-i-1];}

}
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):
cambio(destino[TAM],original[TAM]);
Solo debes utilizar los nombres de los arrays, de esta forma:
cambio(destino, original);

Y la función que invierte la cadena esta mal implementada, debería ser mas o menos así:
void reverse(char *dst, char const *src)
{
   int i;
   
   /* Encontramos el final de la cadena original */
   for (i = 0; src[i] != '\0'; i++)
      ;
   
   /* Almacenamos el indicador de fin de cadena */
   dst[i] = '\0';
   
   /* Copiamos los demas caracteres */
   while (i-- > 0)
      *dst++ = src[i];
}

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#define TAM 200
void cambio (char v[], char m[]);
int main(){
   int i;
   char destino[TAM];
   char destino_reves[TAM];
   char original[TAM];
   printf("Introduzca la primera cadena destino:");
   gets(destino);
   printf("Introduzca la segunda cadena original:");
   gets(original);
   for(i=0;destino[i]!='\0';i++){
            destino_reves[i]= destino[strlen(destino)-i-1];}
   destino_reves[i]='\0';
    strcat( original, destino_reves);
   puts(original);
   return 0;
}

Sorry, se me ha adelantado rir mientras posteaba esto.Y  como siempre claro y preciso en sus explicaciones.
Saluditos!.