我希望vector_total没有任何重复的数字

时间:2016-04-26 21:55:44

标签: c arrays

我需要vector_total没有任何重复的数字。

在main()中声明的条目vector1和vector2的函数。

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++;
        }
    }
}   

功能2.这适用于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;
        }
    }
 }
}

功能3.打印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] );
    }
}

功能4. 以下是问题!! 此功能用于清理我的vector_total并删除重复的数字。

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];

                        }
                }
            }
        }
}

这是我的主要内容。我的声明变量:

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,&amp; n,&amp; m);

ordena(vector_total, &n, &m);

mostra(vector_total, &n, &m);

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

mostra(vector_total, &n, &m);

返回0; }

谢谢大家! :)

1 个答案:

答案 0 :(得分:1)

1)如果函数只处理vector_total,则vector_total的Length最好通过一个参数。如果它不会改变,你也不需要指针传递。

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)删除元素后,函数需要一个新的长度。此外,删除相邻的相同元素,可以是这样的。

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;
}

使用示例

mostra(vector_total, m + n);

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

mostra(vector_total, l);