я в настоящее время этот алгоритм:C - Объединение двух списков строк
char** mergeLists(char **a, char **b, int sizeA, int sizeB, int *lSize)
{
char **list = malloc(sizeof(char *));
int pA = 0, pB = 0, listSize = 0;
while (pA != sizeA && pB != sizeB)
{
list = realloc(list, sizeof(char *) * (++listSize));
if (strcmp(a[pA], b[pB]) < 0)
{
list[listSize-1] = a[pA];
pA++;
}
else
{
list[listSize-1] = b[pB];
pB++;
}
}
*lSize = listSize;
return list;
}
Но, кажется, есть некоторые ошибки. Я в настоящее время работает этот тест:
char *l1[6];
l1[0] = "a";
l1[1] = "b";
l1[2] = "c";
l1[3] = "d";
l1[4] = "e";
l1[5] = "f";
char *l2[6];
l2[0] = "aa";
l2[1] = "ba";
l2[2] = "ca";
l2[3] = "da";
l2[4] = "ea";
l2[5] = "fa";
int s;
char **l = mergeLists(l1, l2, 6, 6, &s);
int i = 0;
for(i = 0; i < s; i++)
printf("%s\n", l[i]);
Это печать:
a
aa
b
ba
c
ca
d
da
e
ea
f
Последний пункт второго списка отсутствуют. Я думаю, что это может быть некоторая ошибка в состоянии цикла while.
Я был бы признателен за помощь. Спасибо.
Кроме того, вы знаете, как большой массив назначения должен быть. Не нужно «malloc», а затем 'realloc' каждый раз ...! –
Это не источник вашей ошибки, но вы действительно должны использовать 'size_t' для длин массивов, длины строк, индексы массивов, размеры объектов, все, что вы планируете передать в' malloc', или получить от 'sizeof' и' strlen' , –
Я не уверен на 100%, я бы назвал это слияние двух * списков * строк, но двух массивов * строк. Помимо этого, ответ уже предоставлен. – Vatine