0

该程序的目标是从数组中删除重复项

编写一个程序,从用户那里输入一个由 10 个整数组成的数组,并删除重复的数组元素。

以下是一些示例输出: 请输入 10 个整数,每个整数后按回车键:5 75 10 75 5 80 10 5 5 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 个整数,每个整数后按回车键 5 75 10 75 5 80 10 5 5 50

您输入了 7 个唯一号码:5 75 10 75 80 10 5

必须删除或重写重复项,并且应将唯一编号放入新数组中,而不仅仅是显示在屏幕上。我不完全确定我的错误在哪里。似乎在某个地方第一次运行循环时,它似乎无论如何都会找到一个重复项并将数组中的其余循环扔掉?我有点迷路了。任何帮助都将不胜感激。谢谢。

4

3 回答 3

3

Since the question is tagged as C++, you may as well make use of C++ idioms in the code. Let sort and unique do the heavy lifting.

#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, " " ) );
}
于 2013-05-07T23:14:09.437 回答
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, " " ) );
}
于 2013-05-08T00:11:31.943 回答
1

最内层循环重用i,它是最外层循环的变量。使用另一个字母。

同样奇怪的是,如果你想读取 10 个元素,为什么你有一个数组和对应的 11 个循环。此外,你可以用 < count 而不是 <= 10 来限制你的循环。

于 2013-05-07T22:49:31.703 回答