I created the following function to join two vectors (not being able to repeat an equal number), follow the function and comments showing what I did and the error that is giving:
void uniao(int *A, int *B, int qnt)
{
int C[qnt*2], cont, cont2, pos = 0, dif = 0;
for(cont = 0; cont < qnt; cont ++)
{
C[cont] = 0; // zera o vetor do resultado
}
for(cont = 0; cont < qnt; cont ++)
{
for(cont2 = 0; cont2 < qnt; cont2 ++)
{ // compara cada numero do vetor A com todos os numeros do vetor B
if(A[cont] != B[cont2]) // se for diferente ele incrementa um contador
dif += 1;
}
if(dif == (qnt))
{ // se ele for único (diferente de todos os outros numeros do outro vetor
C[pos] = A[cont]; // ele armazena em um novo vetor
pos += 1; // muda a posição desse novo vetor
}
dif = 0; // redefine o contador
}
/*
aqui é a parte que não funcina, primeiro eu armazenei só os números que não
são repitidos do vetor A, agora para completar a união, basta adicionar ao vetor C
todos elementos do vetor B (cujo não serão repitidos), porém preciso adicionar esses
elementos nas posições posteriores do que li ali no for anterior, por isso a variavel pos
agora varro todos elementos do vetor após a última posição que adicionei e atribuo o valor de B a ela,
porem como o cont começa do pos, ele não vai pegar os 'pos' primeiros elementos do vetor B, como resolvo
isso? Tentei colocar outro for dentro dele mas não entendi muito bem
*/
for(cont = pos ; cont < qnt*2; cont ++ )
{
C[cont] = B[cont];
}
}
In the case he does not get x first positions of vector B because I equate the counts. One solution I thought would be to equalize it in the first for, all elements of c equal to null (but I do not know how I do it) and then do an if to fill only the null elements, but as null assignment to an int vector? Because 0 can give a wrong result, since vector A or B can have a 0