Выберите определенные элементы в массиве, чтобы создать новый массив - PullRequest
1 голос
/ 29 марта 2020

Как я могу выбрать определенное количество элементов из массива, указав начальный и конечный порядковый номер для создания нового массива?

Например, если мой исходный массив был {1,2,3, 4,5,6}, и я говорю x = 0 и y = 2 для их значений индекса, у меня будет новый массив {1,2,3}.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Если ваш компилятор поддерживает массивы переменной длины, то вы можете сделать это следующим образом

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

int main(void) 
{
    int a[] = { 1, 2, 3, 4, 5, 6 };
    size_t n1 = 0, n2 = 2;
    int b[n2 - n1 + 1];

    memcpy( b, a + n1, ( n2 - n1 + 1 ) * sizeof( int ) );

    size_t n = sizeof( b ) / sizeof( *b );

    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", b[i] );
    }

    putchar( '\n' );

    return 0;
}

Выходные данные программы:

1 2 3

В противном случае новый массив должен выделяться динамически, как для пример

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) 
{
    int a[] = { 1, 2, 3, 4, 5, 6 };
    size_t n1 = 0, n2 = 2;

    size_t n = n2 - n1 + 1;
    int *b = malloc( n * sizeof( *b ) );

    memcpy( b, a + n1, n * sizeof( int ) );

    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", b[i] );
    }

    putchar( '\n' );

    free( b );

    return 0;
}
1 голос
/ 29 марта 2020
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void print_arr(int* arr, int len) {
    for (int i = 0; i < len; i ++) {
        printf("%d", arr[i]);
        if (i != len - 1) {
            printf(" ");
        } else {
            printf("\n");
        }
    }
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5, 6};
    int start, end;
    printf("input the beginning and the end: ");
    scanf("%d %d", &start, &end);
    int len = end - start + 1;
    // we use malloc to dynamically allocate an array of the correct size
    int* arr2 = (int*)malloc(len * sizeof(int));
    // we use memcpy to copy the values
    memcpy(arr2, arr1 + start, len * sizeof(int));
    print_arr(arr1, 6);
    print_arr(arr2, len);
    // we have to free the memory
    free(arr2);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...