C++数组去重的方法

1.Set

利用Set的特点:自动除重、自动排序

	set<char> ab;
	for(int i=0;i<m;i++)
		ab.insert(aa[i]);  //这里的aa[i]是前面需要去重的数组

	  for(set<char>::iterator i=ab.begin();i!=ab.end();i++)
        cout<<*i; //注意指针运算符    去重并且排序了 

2.字符串操作


int main()
{
  char str[100];
  int i=0,j;
  printf("input a string \n");
  gets(str);
  while(i<strlen(str))
  {   j=i+1;
  printf("delelte  result %d\n",strlen(str));
      while(j<strlen(str))
     {  if(str[j]==str[i])
      {
        str[j]='\0';
        strcat(str,str+j+1) ;
         }
      else  j++;
       }
       i++ ;  
    }
  puts(str);
}

3.字符数组

#define MAXSIZE 100
int main()
{
	char array[MAXSIZE];
	char del; //要删除的元素
	int len, i, j;
		printf( "请输入数据:");
			gets( array );
		printf( "请输入要删除的元素!!!:" );
			scanf( "%c", &del );
	len = strlen(array);
		for( i = 0; i < len; i++ )
		{
			if( del == array[i] )
			{
				for( j = i; j < len; j++ )
					{
						array[j] = array[j+1];
					}
				i--;
			}
		}
	i = 0;
		while( array[i] != '\0' )
		{
			printf( "%c",array[i] );
			i++;
		}
		printf( "\n" );
return 0;
}

好像不大对

4.https://zhuanlan.zhihu.com/p/30174069

5.https://zhuanlan.zhihu.com/p/43559080

6.检测重复输出去重后的长度

int remove_repeat(char *a, int l)//对起始地址为a,长度l的数组进行去重,新的长度以返回值形式返回。
{
	
	int i,j, r=0; //i,j为循环下标,r为去重后元素总数,初始值为0

	for(i = 0; i < l; i ++)
	{

		for(j = 0; j < r; j ++)//检查是否重复

			if(a[j] == a[i]) break;

				if(j == r) //没有重复元素

					a[r++] = a[i]; //将当前元素放置与去重后数组的尾部,并增加去重后的总数。

	}

return r; //返回新的长度。

}

int main()
{
	char arr[]="asdfafdxsse";   //asdfxe
	
	cout<<remove_repeat( arr, strlen(arr));
	
	return 0;
}

怎么不改变顺序去重???

7.https://blog.csdn.net/arthu6/article/details/82818518

算法的伪代码描述:

QuChong:

1.初始化标志数组flag为1;

2.i从0到n递增

2.1 j从i+1到n递增

2.1.1 如a[i]等于a[j],标志组置为0;

3.i从0到n递增

3.1若flag[i]非0,将a[i]赋给a[t],t++;

4.删除后的数组大小n等于t;

5.i从0到n递增,依次输出a[i]。

void QuChong(int a[],int n)
{
    int i,j,t;
    int flag[n];//标志组
    for( i=0;i<n;i++) flag[i]=1;
    for( i=0;i<n;i++)
    {
        for( j=i+1;j<n;j++)
            if(a[i]==a[j])  flag[j]=0;
    }
    t=0;
    for(i=0;i<n;i++)
    {
        if(flag[i]) a[t++]=a[i];
    }
    n=t;
    for(i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
        if(i%10==9) cout<<endl;
    }
}
int main()
{
    int t[100];
    int i,j;
    srand(time(NULL));
    for(i=0;i<100;i++)
    {
        j=rand()%99+1;//100内随机数
        t[i]=j;
        cout<<t[i]<<" ";
        if(i%10==9) cout<<endl;
    }
    cout<<endl<<endl;
    QuChong(t,100);
}

JAVA:https://blog.csdn.net/xuemokingdeath/article/details/78625547

 

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值