该程序的目标是从数组中删除重复项
编写一个程序,从用户输入10个整数的数组,并删除重复的数组元素。
以下是一些示例输出: 请输入10个整数,在每个整数后点击返回: 五 75 10 75 五 80 10 五 五 50 您输入了5个唯一数字: 5 75 10 80 50
这是我到目前为止的代码
#include <iostream>
using namespace std;
int main()
{
int myint[11];
int i,x,count=10;
cout << "Please input 10 integers, hitting return after each one \n";
for(i=0;i<10;i++){
cin>> myint[i];
}
for(i=0;i<=10;i++)
{
for(x=i+1;x<=10;x++)
{
if(myint[x]==myint[i])
{
count--;
for(i=x;i<=count;i++)
{ myint[i] = myint[i+1];
}
}
}
}
cout << endl;
cout << " You entered "<< count << " unique numbers: " << endl;
for(i=0;i<count;i++){
cout << myint[i] << " ";
}
return 0;
}
这是我的输出 请输入10个整数,每个整数后返回 五 75 10 75 五 80 10 五 五 50
您输入了7个唯一数字: 5 75 10 75 80 10 5
必须删除或覆盖重复项,并且应将唯一编号放入新阵列中,而不是仅显示在屏幕上。我不完全确定我的错误在哪里。它似乎在第一次循环运行的某个地方似乎无论如何都会找到一个副本并将其余的循环丢弃在数组中?我有点迷茫。任何帮助都表示赞赏。感谢。
答案 0 :(得分:3)
由于问题被标记为C ++,您也可以在代码中使用C ++习语。让sort
和unique
做繁重的工作。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[])
{
vector<int> v;
cout << "Please input 10 integers, hitting return after each one \n";
for( int i = 0; i < 10; i++ ) {
int num;
cin >> num;
v.push_back(num);
}
sort( v.begin(), v.end() );
v.erase( unique( v.begin(), v.end() ), v.end() );
cout << endl << " You entered " << v.size() << " unique numbers: " << endl;
copy( v.begin(), v.end(), ostream_iterator<int>( cout, " " ) );
}
答案 1 :(得分:2)
以下是我在@ chr的解决方案中提到的集合的解决方案:
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main(int argc, const char* argv[])
{
set<int> s;
cout << "Please input 10 integers, hitting return after each one \n";
for( int i = 0; i < 10; i++ ) {
int num;
cin >> num;
s.insert(num);
}
cout << endl << " You entered " << s.size() << " unique numbers: " << endl;
copy( s.begin(), s.end(), ostream_iterator<int>( cout, " " ) );
}
答案 2 :(得分:1)
最里面的循环重用i,它是最外循环的变量。请使用另一封信。
同样奇怪的是,如果你想读取10个元素,为什么你有一个数组和相应的11循环。 此外,您可以使用&lt;而不是&lt; = 10。