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];}
}
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
Sin usar funciones y con strcat:
#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!.