目标:编写程序以从数组中删除重复项

时间:2014-05-07 04:25:30

标签: c++

大家好我是c ​​++初学者我正在研究程序目标:编写一个程序来删除数组中的重复项。我开始吧,但我仍然认为我有逻辑问题,或者我没有正确的想法,如果有人能帮助我,我会很高兴。顺便说一下,使用一个函数就是我使用的原因。

#include <iostream>
using namespace std;

void removeDuplicate(int [], int);

int main()
{
 int array[10];
 int i;
 removeDuplicate (array, i);
  return 0;
}

void removeDuplicate(int array[], int)
{

for(i=0;i<size;i++)
{
   for(j=i+1;j<size;)
   {
      if(array[j]==array[i])
     {
        for(k=j;k<size-1;k++)
            array[k]=array[k+1];
         n--; 
      }
      else
         j++;
   }
}
}

2 个答案:

答案 0 :(得分:1)

The loop to remove duplicate should be

for(int i=0;i<size;i++)
{
   for(int j=i+1;j<size;)
   {
      if(array[j]==array[i])
      {
         for(k=j;k<size-1;k++) //shift all elements one place left

             array[k]=array[k+1];
          size--; // decrease array size by 1
      }
      else
         j++; //you want to increase counter only if no shifting took place
   }
}

答案 1 :(得分:1)

我感觉有点厚颜无耻:

#include <iostream>
#include <set>

size_t remove_duplicates(int array[], size_t size)
{
    std::set<int> numbers;
    int *end = std::copy_if(array, array+size, array, [&numbers](const int& num) {
        if (numbers.find(num) != numbers.end())
            return false;
        numbers.insert(num);
        return true;
    });
    return end - array;
}

int main(int argc, const char * argv[])
{
    int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    size_t size = 10;
    size = remove_duplicates(arr, size);

    std::cout << "Array 1" << std::endl;
    for (int i = 0; i < size; ++i)
        std::cout << arr[i] << std::endl;
    std::cout << std::endl;

    int arr2[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 };
    size_t size2 = 10;
    size2 = remove_duplicates(arr2, size2);

    std::cout << "Array 2" << std::endl;
    for (int i = 0; i < size2; ++i)
        std::cout << arr2[i] << std::endl;
    std::cout << std::endl;
}

注意:这个答案对初学者来说并不是真的。