大家好我是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++;
}
}
}
答案 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;
}
注意:这个答案对初学者来说并不是真的。