#arrays #c #split
#массивы #c #разделение
Вопрос:
Допустим, a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
тогда я хочу, чтобы x = [1,2,3,4,9,10,11,12] y = [5,6,7,8,13,14,15,16]
Я мог бы сделать это
#include <stdio.h>
int main()
{
int array[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int *firstHalf = malloc(8 * sizeof(int));
int *secondHalf = malloc(8 * sizeof(int));
memcpy(firstHalf, array, 4 * sizeof(int));
memcpy(secondHalf, array 4,4 * sizeof(int));
memcpy(firstHalf 4, array 8, 4 * sizeof(int));
memcpy(secondHalf 4, array 12,4 * sizeof(int));
for (int i=0;i<8;i )
{
printf("First %dn",firstHalf[i]);
} for (int i=0;i<8;i )
{
printf("Second %dn",secondHalf[i]);
}
}
Я сделал это, но мне нужно решение, чтобы поместить его в цикл for, чтобы сделать его расширяемым
Пожалуйста, подскажите мне, как это можно сделать
Комментарии:
1. Я не понимаю, почему вы начинаете с копирования 8 элементов, когда вам нужно только 4. Скопируйте 4 элемента в первый массив, скопируйте следующие 4 элемента в другой массив и повторите, следя за конечным условием и неполными наборами в конце.
Ответ №1:
Получил ответ, но если у вас есть лучшее предложение, дайте мне знать
#include <stdio.h>
int main()
{
int array[32] = {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};
int *firstHalf = malloc(16 * sizeof(int));
int *secondHalf = malloc(16 * sizeof(int));
//for (int h=0;h<9;h =4)
for (int l=0,h=0;l<33,h<16;l=l 8,h=h 4)
{
memcpy(firstHalf h, array l, 4 * sizeof(int));
memcpy(secondHalf h, array 4 l,4 * sizeof(int));
}
for (int i=0;i<16;i )
{
printf("First %dn",firstHalf[i]);
} for (int i=0;i<16;i )
{
printf("Second %dn",secondHalf[i]);
}
}
Ответ №2:
Я не совсем уверен, какой это параметр, который вы хотите расширить, поэтому я воссоздал ваш код с двумя параметрами N = 2 — это количество векторов, которые вы хотите в конце, M = 4 — это размер фрагментов, которые вы хотите скопировать вместе:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define N 2 // split in N=2 arrays
#define M 4 // always copy M=4 items together
int main()
{
int array[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int *parts[N];
for (int i=0;i<N;i )
{
parts[i] = malloc(16 * sizeof(int) / N);
}
for (int i=0;i<16/N/M;i )
{
for (int j=0;j<N;j )
{
memcpy(parts[j] i*M, array i*M*N j*M, M * sizeof(int));
}
}
for (int i=0;i<8;i )
{
printf("First %dn",parts[0][i]);
} for (int i=0;i<8;i )
{
printf("Second %dn",parts[1][i]);
}
}
Вам обязательно следует изменить M, N на значимые имена и вставить имена для M * N и т.д. в соответствии с контекстом и уделять особое внимание, если ваши числа не делятся, как в этом примере.