我试图解决的问题是在用户向数组输入值时检查数组。具体说明是:使用单独的方法进行检查;该方法必须首先对数组进行排序;重复检查必须实时执行,这意味着用户不会先输入所有值,然后数组返回并检查它们。我环顾四周,虽然我已经弄清楚如何排序,但我完全困惑于如何在输入每个值时检查重复项。谁能插入我朝正确的思考方向前进?
这是我在作业范围内想到的:
void getLottoPicks(int numbers[])
{
cout << "Please enter your 7 lotto number picks between 1 and 40: " << endl;
for (int i = 0; i < SIZE; i++)
{
cout << "Selection #" << i + 1 << endl;
cin >> numbers[i];
while (numbers[i] < 1 || numbers[i] > 40)
{
cout << "Please choose a number between 1 and 40: " << endl;
cin >> numbers[i];
}
for (int j = 0; j < i; j++)
{
while (numbers[i] == numbers[j])
{
cout << "You have already picked that number. Enter a different one: " << endl;
cin >> numbers[i];
}
}
}
}
它编译并运行时没有任何错误(无论如何,我还没有发现任何错误)。如果有人有任何反馈,我们将不胜感激。我知道这种算法效率非常低,但我们的数组只有 7 个值长,这正是我们所要求的。最初我认为必须对其进行排序,但只有当我们选择在不同的函数中进行检查时才需要进行排序。
最佳答案
您可以通过多种方式来做到这一点。
首先,如果您仅使用数组,请使用 std::sort 和 std::unique。
如果数组中的最大数字不是很大,可以维护一个 bool 数组,可以将其设置为 0。
#include <cstring> bool a[100000]; memset(a,0,sizeof a) main(){ int x,i,arr[1000]; while(cin>>x){ if( a[x] == 0) arr[i++]=x,a[x]=1; }
在数组中输入值之前,检查该数字的 a 索引值是否为 0。
如果为 0,请输入数组中的值,标记 bool 数组的索引 1。
稍后您可以使用排序
#include<algorithm>
sort(arr,arr+(size of arr));
3.您可以维护一个集合来输入值,而不是数组,它将是一个二叉树,并且会丢弃任何重复的值,并且插入后的值将按排序顺序排列。
#include <set>
set <int> arr;
main(){
int x;
while(cin>>x)
a.insert(x);
}
您可以使用像
这样的迭代器从集合中获取值 set<int> :: iterator it;
关于c++ - 如何在 C++ 中对数组进行排序和检查重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027656/