清除数组中重复项的功能

时间:2017-05-05 15:19:01

标签: c arrays function duplicates

我正在尝试创建一个清除我的数组中的数字副本的函数,但似乎我无法弄清楚我缺少的只是删除重复。 只是为了说明一点: 该功能不应该无效。

[1,2,3,3,4] -> [1,2,3,4]
[4,2,5,1]->[4,2,5,1]
[32,21,2,5,2,1,21,4]->[32,21,2,5,1,4]

我的数组中不应该是空格,函数应该返回 清理数组中的唯一元素,其中clean被定义为“不重复整数”

#include <stdio.h>

int generateUniqeList(int *list, int length);

int main()
{
    int list[6] = { 5, 5, 4, 3, 2, 1 };
    int duplicate = generateUniqeList(list, 6);

    for (int i = 0; i < 6; i++)
    {
        printf("%d\n", list[i] - 1); //Here i am able to change the value of the duplicates with the - 1
    }
    getchar();

    return 0;
}


int generateUniqeList(int *list, int length)
{
    int duplicate = 0;

        for (int i = 0; i < length; i++)
        {
            if (list[i] == list[i])
                duplicate = list[i];
        }
    return duplicate;
}

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include<string.h>


void generateUniqeList(int *list, int length);

int main()
{
  int list[6] = { 5, 5, 4, 3, 2, 1 };
  generateUniqeList(list, 6);

  for (int i = 0; i < 6; i++)
  {
    printf("%d", list[i]); 
  //Here i am able to change the value of the duplicates with the - 1
  }
  putchar('\n');

  return 0;
}


void generateUniqeList(int *list, int length){
  int i ,j,k;
  for (i = 0; i < length; i++) {
      for (j = i + 1; j < length;) {
         if (list[j] == list[i]) {
            for (k = j; k < length; k++) {
               list[k] = list[k + 1];
            }
            length--;
         } else
            j++;
      }
   }

}

答案 1 :(得分:0)

您正在做的是将列表中的每个int减去1.这不会删除重复项。要从数组中删除元素,请查看: How to remove an element from an array in C?

答案 2 :(得分:0)

这个功能没有意义。例如,此if语句中的条件

if (list[i] == list[i])
    duplicate = list[i];

总是正确的,因为每个对象都等于它自己。

该函数不会修改数组。

您无法调整数组大小,但可以在数组的开头收集所有唯一元素并返回唯一元素的数量。

这是一个示范程序。

#include <stdio.h>

size_t generateUniqeList( int *a, size_t n )
{
    size_t m = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        size_t j = 0;
        while ( j < m && a[j] != a[i] ) j++;

        if ( j == m )
        {
            if ( m != i ) a[m] = a[i];
            ++m;
        }
    }

    return m;
}   

int main(void) 
{
    int list[] = { 5, 5, 4, 3, 2, 1 };
    const size_t N = sizeof( list ) / sizeof( *list );

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", list[i] );
    putchar( '\n' );

    size_t m = generateUniqeList( list, N );

    for ( size_t i = 0; i < m; i++ ) printf( "%d ", list[i] );
    putchar( '\n' );

    return 0;
}

它的输出是

5 5 4 3 2 1 
5 4 3 2 1