简体   繁体   中英

I want that vector_total dont have any repeated number

I need that vector_total dont have any repeated number.

Function for entry vector1 and vector2 that are declared in main().

void entrada_vectors(int vector1[], int vector2[], int vector_total[], int *n, int *m)
{     
    int i=0, j=0;

    /*Entrarem els nombres del vector 1 primer */

    for (i=0; i<*n; i++)
     {
           vector_total[i]=vector1[i];
     }

    /*Entrarem els nombres del vector 2 després */

    for (i=*n; i<*n+*m; i++)
    {
        if (j<*m)
        {
         vector_total[i]=vector2[j];
        j++;
        }
    }
}   

Function 2. This is for order numbers in vector_total.

void ordena(int vector_total[], int *n, int *m)
{   
    int i=0, j=0;
    int aux=0;

 for (i=0; i<*n+*m-1; i++)
 {
    for (j=0; j<*n+*m-1; j++)
    {
        if (vector_total[j]>vector_total[j+1])
        {   
            aux=vector_total[j];
            vector_total[j]=vector_total[j+1];
            vector_total[j+1]=aux;
            aux=0;
        }
    }
 }
}

Function 3. Print vector_total

void mostra(int vector_total[], int *n, int *m )
{   int i;

    for (i=0; i<*n+*m; i++)
    {
        printf ("Pos %d del vector: %d\n", i, vector_total[i] );
    }
}

Function 4. Here are the problem!! This function is for clean my vector_total and drop the repeated numbers.

void limpiar_repetidos(int vector_total[], int *n, int *m)
{
    int x=0, i=0, j=0;

        for (i=0; i<*n+*m-1; i++)
        {
            for (j=0; j<*n+*m-1; j++)
            {
                if (vector_total[j]==vector_total[j+1])
                {   
                        x=j+1;
                        for (i=*n+*m; i>x; i--)
                        {
                            vector_total[i-1]=vector_total[i];

                        }
                }
            }
        }
}

And here is my main. And my declaration variables:

int vector1[]={7,1,5,3,4,2};

int vector2[]={3,7,3,0,9,10};

int n=sizeof(vector1)/sizeof(vector1[0]);

int m=sizeof(vector2)/sizeof(vector2[0]);

int vector_total[n+m];

main()

{ entrada_vectors(vector1, vector2, vector_total, &n, &m);

ordena(vector_total, &n, &m);

mostra(vector_total, &n, &m);

limpiar_repetidos(vector_total, &n, &m);
printf ("==================\n");

mostra(vector_total, &n, &m);

return 0; }

Thanks everybody! :)

1) If function deal with only a vector_total , Length of the vector_total is better to pass by one argument. Also you do not need to pointer pass if it will not change.

void mostra(int vector_total[], int len){
    int i;

    for (i=0; i<len; i++) {
        printf ("Pos %d del vector: %d\n", i, vector_total[i] );
    }
}

2) function need a new length after the element has been removed. Also, deletion of adjacent same elements that can be like this.

int limpiar_repetidos(int vector_total[], int len){//int *n, int *m --> int len
    int i, size, new_size;

    size = len;
    for(i = new_size = 1; i < size; ++i){
        if(vector_total[new_size-1] != vector_total[i])
            vector_total[new_size++] = vector_total[i];
    }
    return new_size;
}

Example of use

mostra(vector_total, m + n);

int l = limpiar_repetidos(vector_total, n + m);

mostra(vector_total, l);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM