Dev - C++ - llenar un arreglo con otro de diferentes tamaños.

 
Vista:
Imágen de perfil de David Orlando

llenar un arreglo con otro de diferentes tamaños.

Publicado por David Orlando (2 intervenciones) el 17/03/2017 02:43:02
Hola amigos tengo una enorme pregunta que ha dado vueltas por mi cabeza, podria alguien ayudarme con esto.

Quiero llenar un arreglo con otro, pero el primer arreglo es mayor al segundo.

1
2
3
int tamano;
int arreglo1[4];
int arreglo2[tamano];

ahora digamos que el primer arreglo contiene los siguientes números.

1
arreglo[] = {4,6,7,8,0};

Ahora creo un bucle para crear el tamaño del segundo.

1
2
3
4
5
for (int i = 0; i <= 4; i++) {
    if (vector[i] != 0) {
        tamano++;
    }
}

Ahora con el tamaño ya propuesto nuestro segundo arreglo ya tiene tamaño, mi pregunta es:

¿ como ingreso estos datos al arreglo2 si es de diferente tamaño ?

p.d. necesito excluir de el los datos que sean igual a cero, se los agradeceré infinitamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

llenar un arreglo con otro de diferentes tamaños.

Publicado por agustin (522 intervenciones) el 17/03/2017 11:01:41
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include  <stdio.h>
#include <stdlib.h>
 
int main ()
{
	int tamano;
    int arreglo1[5]={4,6,0,8,0};
    int *arreglo2;
 
    //obtengo el tamaño del array sin ceros
    for (int i = 0; i < 5; i++) {
        if (arreglo1[i] != 0) {
            tamano++;
        }
    }
 
    //reservo la memoria necesaria
    arreglo2=(int*)malloc (sizeof (int)*tamano);
 
    //copio los valores que no sean cero al array final
    for (int i = 0,j=0; i < 5; i++) {
        if (arreglo1[i] != 0) {
            arreglo2[j++]=arreglo1[i];
        }
    }
 
    //muestro el contenido del array final
    for (int i = 0; i < tamano; i++) {
        printf ("%i\t",arreglo2[i]);
    }
 
    return 0;
}
El modo en que reservas memoria dinámica no es estándar.
El tamaño del primer array que usabas era inferior al número de elementos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de David Orlando

llenar un arreglo con otro de diferentes tamaños.

Publicado por David Orlando (2 intervenciones) el 17/03/2017 22:39:39
Agradezco infinitamente tu respuesta Agustin, ha funcionado perfectamente !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar