Witam mam za zadanie napisać funkcję, która otrzymuje pięć parametrów wskaźnik na tablicę int a, wskaźnik na tablicę int b, rozmiar a, rozmiar b, i wskaźnik który ma wartość o długości połączonych tablic. Z pierwszej tablicy usuwamy duplikaty, podobnie z drugiej. Następnie łączymy te dwie tablice sortujemy połączone tablice i długość tak utworzonej tablicy umieszczamy we wskaźniku ostatnim parametrze funkcji. Następnie zwracamy tak utworzoną nową tablicę. Poniżej zamieszczam kod:
#include <stddef.h>
#include <stdlib.h>
int compare(const void *a, const void *b)
{
return *(int*)a-*(int*)b;
}
int *testit(const int *a, const int *b, size_t az, size_t bz, size_t *cz) {
int *res=(int*)malloc(sizeof(int)*(az+bz));
size_t i,j;
qsort(a,az,sizeof(int),compare);
qsort(b,bz,sizeof(int),compare);
for(i=0,j=0;i<az;)
{
if(a[i]!=a[i+1])
res[j++]=a[i++];
if(a[i]==a[i+1])
{
while((a[i]==a[i+1])&&(i<az))
i++;
res[j++]=a[i++];
}
}
for(i=0;i<bz;)
{
if(b[i]!=b[i+1])
res[j++]=b[i++];
if(b[i]==b[i+1])
{
while((b[i]==b[i+1])&&(i<bz))
i++;
res[j++]=b[i++];
}
}
*cz=j;
qsort(res,*cz,sizeof(int),compare);
return res;
}
Problem polega na tym, że serwer przy kompilacji wyrzuca mi błąd o nieprawidłowym rozmiarze tablicy we wskaźniku *cz. Poniżej opis błędu
ERROR < incorrect array length >
Array a: {13, 15, 28, 71, 79, 80, 98}
Array b: {8, 11, 14, 28, 28, 36, 46, 63, 65, 80, 86, 88, 89, 91}
Expected: {8, 11, 13, 14, 15, 28, 28, 36, 46, 63, 65, 71, 79, 80, 80, 86, 88, 89, 91, 98}
Submitted: {0, 8, 11, 13, 14, 15, 28, 28, 36, 46, 63, 65, 71, 79, 80, 80, 86, 88, 89, 91, 98}
Mam pytanie jak to poprawić. Nie mam pomysłu na zapisanie we wskaźniku innej wartości, bo przecież j ma długość połączonych tablic?