删掉数组中重复的数据

clavsummer 2009-03-23 11:10:03
#include<iostream>
using namespace std;
int main()
{
int array[10]={1,8,3,4,4,6,6,7,7,9};
int i;
int j;
int sum=0;
for(i=0;i<=9;i++)
for(j=i+1;j<=9;j++)//
{
if(array[i]==array[j])
{
cout<<"重复的数为:"<<array[i]<<endl;
sum++;

break;
}
}
cout<<"重数数字的个数为:"<<sum<<endl;
return 0;
}
如何删掉数组中重复的数据,并输出显示为:1,8,3,4,6,7,9
...全文
366 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
noky 2009-03-24
  • 打赏
  • 举报
回复
int array[10]={1,8,3,4,4,6,6,7,7,9};
std::vector<int> vec(array,array + 10);
vec.erase(std::unique(vec.begin(),vec.end()),vec.end());
std::vector<int>::const_iterator iter = vec.begin();
while (iter != vec.end())
{
std::cout << *iter << std::endl;
}
pengzhixi 2009-03-24
  • 打赏
  • 举报
回复
呵呵 LS的想法和我前面的相同。
jakqigle 2009-03-24
  • 打赏
  • 举报
回复
不用STL的话,先排序,重复的相邻在一起后,顺序删除。
  • 打赏
  • 举报
回复
又来这种题目?貌似跟上次那个帖子的要求一样。
还是帖个位图的给你吧。
http://topic.csdn.net/u/20090312/17/90953743-f691-4ca2-8711-16eb38195a94.html


#define MAX 10000

using namespace std;

void main()
{
int i,j=0;
int bit_map[MAX]={0};
int a[] = {1,8,3,4,4,6,6,7,7,9};
int b[10]={0};
for(i=0;i<( sizeof(a)/sizeof(int) );i++)
{
if(bit_map[a[i]]==0)
{
b[j++]=a[i];
bit_map[a[i]]=1;
}
}
for(i=0;i<j;i++)
cout<<b[i]<<endl;
}

yangch_nhcmo 2009-03-24
  • 打赏
  • 举报
回复
用容器来处理

#include <iostream>
#include <algorithm>
#include <list>
using namespace std;

void output(int i_val)
{
cout << i_val << '\t';
}

int main()
{
int array[10]={1,8,3,4,4,6,6,7,7,9};
list<int> list_t(array,array+10); //用数组来初始化list_t

list_t.erase(unique(list_t.begin(),list_t.end()),list_t.end());//删除所有重复的元素

for_each(list_t.begin(),list_t.end(),output); //这里显示出删除后的数组元素

return 0;
}

yelling 2009-03-24
  • 打赏
  • 举报
回复
这种题也能写出一页的代码 真是强啊
old-six-programmer 2009-03-24
  • 打赏
  • 举报
回复

int a[10] = { 1,8,3,4,4,6,6,7,7,9 };
vector<int> vec( a, a+10 );
sort( vec.begin(), vec.end() );
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );

[Quote=引用 16 楼 Lovegarfield 的回复:]
为什么不用自带的unique之后再erase删除啊?
[/Quote]
pengzhixi 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 star_virgo 的回复:]
7楼方法很好很强大

但在这个应用里有些浪费内存空间

如果楼主不要求输出重复次数得话,用位来存储位图可以省好多内存

要求输出重复次数得话其实可以用 char 来做位图存储

因为 char 在c++ 中已经是最小得单位空间了,和 bool 同样大小

建议在里面存放可以记录次数得字符(可以考虑用 ASICII 码)
[/Quote]

实际上可以用array[10]这个数组里面最大的数来分配内存就是,不过万一array[10]数组里面的最大的数比较大的话就有点浪费内存了.
star_virgo 2009-03-24
  • 打赏
  • 举报
回复
7楼方法很好很强大

但在这个应用里有些浪费内存空间

如果楼主不要求输出重复次数得话,用位来存储位图可以省好多内存

要求输出重复次数得话其实可以用 char 来做位图存储

因为 char 在c++ 中已经是最小得单位空间了,和 bool 同样大小

建议在里面存放可以记录次数得字符(可以考虑用 ASICII 码)
Lovegarfield 2009-03-24
  • 打赏
  • 举报
回复
为什么不用自带的unique之后再erase删除啊?
cansen 2009-03-24
  • 打赏
  • 举报
回复
= = 最后输出的那段写得不美观.重写..
#include <iostream>
using namespace std;
int main()
{
int array[10]={1,8,3,4,4,6,6,7,7,9};
int i = 9, j = 9;
for(;i;i--)
for(j = i;j;j--)
{
if(!(array[i] - array[j]))
{
array[i] = 0;
cout < < "重复的数为:" < < array[j] < <endl;
}
}

for(;i-10;i++)
array[i] ?(cout < < array[i] < < ", "):j++;

cout < < "\n重数数字的个数为:" < < j < <endl;
return 0;
}


一样.没测试.
cansen 2009-03-24
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main()
{
int array[10]={1,8,3,4,4,6,6,7,7,9};
int i = 9, j = 9;
for(;i;i--)
for(j = i;j;j--)
{
if(!(array[i] - array[j]))
{
array[i] = 0;
cout<< "重复的数为:" << array[j] <<endl;
}
}

for(;i-10;i++)
if(array[i])
cout<< array[i] << ", ";
else
j++;



cout << "\n重数数字的个数为:" << j <<endl;
return 0;
}



写完.没测试.
eatsweetpotato 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]

C/C++ code
#define MAX 10000

using namespace std;

void main()
{
int i,j=0;
int bit_map[MAX]={0};
int a[] = {1,8,3,4,4,6,6,7,7,9};
int b[10]={0};
for(i=0;i<( sizeof(a)/sizeof(int) );i++)
{
if(bi…
[/Quote]

up
old-six-programmer 2009-03-24
  • 打赏
  • 举报
回复

#include <iostream>
#include <vector>
#include <cstdlib>
#include <iterator>

using namespace std;

template<class Type>
vector<Type> GetUnique( vector<Type> vec )
{
vector<Type> vec_result;

sort( vec.begin(), vec.end() );

unique_copy( vec.begin(), vec.end(), back_inserter( vec_result ) );

return vec_result;
}

template<class Type, int Size>
vector<Type> GetUnique( Type array[Size] )
{
vector<Type> vec( array, array + Size );
vector<Type> vec_result;

sort( vec.begin(), vec.end() );

unique_copy( vec.begin(), vec.end(), back_inserter( vec_result ) );

return vec_result;
}

int main()
{
int a[10] = { 1,8,3,4,4,6,6,7,7,9 };


//vector<int> vec( a, a+10 );
//vector<int> vec_unique = GetUnique( vec );

vector<int> vec_unique = GetUnique<int, 10>( a );

copy( vec_unique.begin(), vec_unique.end(), ostream_iterator<int>( cout, "" ) );
//copy( vec.begin(), vec.end(), ostream_iterator<int>( cout, "" ) );

system( "pause" );
return 0;
}
noky 2009-03-24
  • 打赏
  • 举报
回复
while (iter != vec.end())
{
std::cout < < *iter < < std::endl;
++iter;
}
lzy340623339 2009-03-23
  • 打赏
  • 举报
回复
代码没有测试过,没时间了,呵呵
#include <iostream> 
using namespace std;

void move(int a[],int f,int d,int g)
{
while(f<g)
{
a[f-d]= a[f];
f++;
}
}

int main()
{
int array[10]={1,8,3,4,4,6,6,7,7,9};
int length=10;
int i;
int j,k=0;//k为连续重复的个数
int sum=0;
for(i=0;i <length;i++)
{
for(j=i+1;j <length;j++)//
{
if(array[i]==array[j])
{
cout<<"重复的数为:"<<array[i]<<endl;
k++;
sum++;
}
else
{
move(array,j+1,k,length); //前移重复元素后面的元素
length-=k;
}
}
}
lzy340623339 2009-03-23
  • 打赏
  • 举报
回复
把重复元素后面的元素前移,覆盖掉重复元素,即达到删除重复元素的目的
pengzhixi 2009-03-23
  • 打赏
  • 举报
回复
不好意思搞错了点是 if(a[array[i]]==0)
pengzhixi 2009-03-23
  • 打赏
  • 举报
回复
int a[9]={0};
for(int i=0;i<10;++i)
{ if(a[array[i])==0)
a[array[i]]=1;
else
cout<<"重复数为:"<<array[i];
}
mengde007 2009-03-23
  • 打赏
  • 举报
回复
for(i=0;i <=9;i++)
for(j=0;j <=9;j++)//
{
if(array[i]==array[j])
{
cout < <"重复的数为:" < <array[i] < <endl;
sum++;
}
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧