Ayuda urgente #C en este ejercicio

Iniciado por ayoub20600, 18 Enero 2018, 21:06 PM

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

ayoub20600

Hola a todos,

Me han pedido hacer este ejercicio y llevo dos días estancado sin poder resolver-lo. He visto ejemplo y tal en la web pero es que no me salgo.

Agradecería que alguien me ayudase.

Os dejo el enunciado.

Deberás crear un fichero.h (el nombre queda a tu elección). En este fichero, que deberá estar protegido para que se pueda incluir varias veces, deberás definir una constante, llamada MAX. Puede tomar el valor que quieras, con un mínimo de 512 y un máximo de 8192. En este punto .h declararás una función, cuyo nombre queda a tu elección.
En la función main, pedirás al usuario que introduzca tres palabras. Esas tres palabras las pasarás como parámetros a la función que habrás declarado en el fichero .h. La función devolverá una cadena (creada con malloc dentro de la función), que contendrá las tres palabras, separadas por espacio en blanco.
La función la implementarás en el fichero .c, después de la función main.
En el fichero .c, no olvides incluir (con #include) el fichero .h, poniendo su nombre entre comillas (no entre "<", ">").

MAFUS

¿Qué llevas hecho?
No te vamos a escribir todo desde cero, te resolveremos dudas puntuales o te lo explicaremos hasta que lo entiendas (a partir de lo que veamos en donde fallas).

ayoub20600

Cita de: MAFUS en 18 Enero 2018, 21:19 PM
¿Qué llevas hecho?
No te vamos a escribir todo desde cero, te resolveremos dudas puntuales o te lo explicaremos hasta que lo entiendas (a partir de lo que veamos en donde fallas).
Vale.

Yo tengo una cabecera que se llama ayoub.h, luego tengo main.c y implementacion.c

en la cabecera tengo este código:

#ifndef _AYOUB_H
#define _AYOUB_H

//
#include<stdio.h>
#include <string.h>
//#include <cstring.h>

#define MAX 50

void uniones(char *a, char *b, char *c);

#endif

El fichero main.c tengo esto:

#include<stdio.h>
//#include <cstdlib>
#include"ayoub.h"
#include <string.h>



int main(){
   
   printf("Introduzca tres palabras");
   char a [15]; //el MAX me da error
   char b [15];
   char c [15];

   printf("\nPalabra A");
   gets(a); // solo lee 1 palabra
   printf("\nPalabra A");
   gets(b); // solo lee 1 palabra
   printf("\nPalabra A");
   gets(c); // solo lee 1 palabra
   
   printf("Nombre de palabra A ingresado es:  ");
   puts(a);
   
   printf("Nombre de palabra B ingresado es:  ");
   puts(b);
   
   printf("Nombre de palabra C ingresado es:  ");
   puts(c);
   

   
   char cadena_union = uniones( a, b, c);
   puts(cadena_union);
//   system("PAUSE");
   return 0;
}

Aquí se supone que debo rellenar las 3 cadena y devolver el resultado a la función de la cabecera.

El el fichero de implementacion.h tengo esto:
#include"ayoub.h"
#include<stdio.h>
#include<string.h>

using namespace std;


void uniones(){

   int longitud1, longitud2, longitud3 = 0;
   int suma_longitudes = 0;
   longitud1= strlen(a);                              //copio cuantos el numero de caracteres a longitud1
   longitud2= strlen(b);                              //copio cuantos el numero de caracteres a longitud2
   longitud3= strlen(c);                              //copio cuantos el numero de caracteres a longitud3
   printf("\nLa cadena A tiene %d caracteres", longitud1);      //aqui simplemente visualizo cuantos son
   printf("\nLa cadena B tiene %d caracteres", longitud2);
   printf("\nLa cadena C tiene %d caracteres", longitud3);
   
   suma_longitudes=longitud1+longitud2+longitud3;             //sumo las longitudes para asignar espacio para la string cadena
   
            char *cadena = (char *)malloc((suma_longitudes + 1) *sizeof(char));//asigno el espacio acorde con lo que he introducido en las 3 cadenas de palabras
            printf("\nCadena: ");
            //scanf("%s", cadena);
            strcpy(cadena, a);//esto no sé si esta bien, pero lo que intento hacer es copiar el contenido de las 3 en una cadena
            strcpy(cadena, b);
            strcpy(cadena, c);
            printf("\n El resultado es %s", cadena);
}
Aquí lo que intento hacer es reservar espacio en la memoria con malloc y copiar el contenido de las 3 cadenas (a,b,c) en una dejando espacio entre cada contenido.

Saludos

MAFUS

Los includes sobran en el ayoub.h ya que no haces uso de ninguna función de ellas.
Implementación.c sobra, el ejercicio te pide el main y justo debajo, en el mismo archivo, la implementación de la función.
La firma de la declaración y de la definición de la función deben coincidir. Deben devolver el mismo tipo de dato y los argumentos deben ser del mismo tipo.
La función debe devolver una cadena, por lo que la declaración que hay en la cabecera debería ser char* y no void como tipo de dato devuelto por la función.
Si quieres una constante definida en la cabecera usa la palabra clave const. En main deberás declararla como extern.
strcpy còpia al principio de la cadena destino, lo que necesitas es concatenar cadenas y se hace con strcat.
El enunciado dice que debes separar con espacios las palabras pero al adquirir espacio con malloc no tienes en cuenta los espacios.
De igual forma tampoco los incluyes al formar la cadena.