Programa con cadenas

Iniciado por muymuyperdido, 2 Diciembre 2012, 18:12 PM

0 Miembros y 1 Visitante están viendo este tema.

muymuyperdido

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];}

}

rir3760

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|.

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

#2
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!.