c语言删除重复数据

c语言删除重复数据,第1张

程序的基本思路是把输入的字符串放到a[100]字符组中,然后把a[100]中所有不重复的字符添加到b[100]中,间接完成对字符串中的重复字符的删除

#include<stdio.h>

void main()

{

char a[100],b[100]

//定义两个字符组,a[100]用来接收输入的字符串,b[100]用来存储不重复的字符

int pa=0,pb=0,i,flag

scanf("%s",a)

//输入字符串到a[100]中,用scanf读入到a[100]中会自动在a[100]中字符串结束的地方加上'\0'

for(pa=0a[pa]!='\0'pa++)

//for循环结束的条件是a[pa]==0,也就是从a[100]字符组中读取一个字符,直到没有

{

flag=1

//flag是个标志符,当flag==1时,说明这个字符(下句中的a[pa])是第一次出现,应该加入到b[100]中

//如果flag==0,说明这个字符(下句中的a[pa])重复了,不应该加到b[100]中

for(i=0i<pbi++) if(b[i]==a[pa]) flag=0

//把a[100]中读取的字符a[pa]与b[100]中的所有字符进行比较,如果b[i]==a[pa]

//说明这个字符已经在b[100]中了,也就是重复字符了,所有将flag=0,不能加入b[100]中

//如果a[pa]与b[100]中的所有字符都不相等,说明这个字条是第一次出现,应该加到b[100]

if(flag)

{

b[pb]=a[pa]pb++

}

//如果flag==1,则将a[pa]这个字符加入到b[100]中,然后将pb加1

}

b[pb]='\0'

//当所有的不重复的字符都加入到b[100]中时,将b[100]中字符结束的地方加'\0',也就是b[pb]='\0'

//因为字符串都是民'\0'结尾的,所以加上这句

printf("%s\n",b)

//输出b[100]中的字符串,也就是删除过重复字符之后的了

}

#include <iostream>

using namespace std

bool Removeduplicate(int data[],int &lon,int a)//去掉数组中为a的数据

int main()

{

 int l1=10 

 int l2=10

 int a1[10]={10,10,12,26,56,26,30,30,20,10}

 int a2[10]={10,12,56,10,20,22,22,33,33,30}

 int j=0,i

 while(j<=l1)

 {

  if(Removeduplicate(a1,l1,a2[j]))  //如果有删除就说明两数组中有有相同数据a2[j]

  {

   Removeduplicate(a2,l2,a2[j])//如果a2[j]数据是重复数据就删除

  }

  else

  {

  j++  //如果没有重复数据就判断下一个数据

  }

 }

 cout<<"l1="<<l1<<endl

 for(i=0i<l1i++)

  cout<<a1[i]<<" "

 cout<<endl

 cout<<"l2="<<l2<<endl

 for(i=0i<l2i++)

  cout<<a2[i]<<" "

 cout<<endl

 return 0

}

bool Removeduplicate(int data[],int &lon,int a)    //去掉数组中为a的数据

{

 int mak=0     //标志位

 for(int i=0i<loni++)

 {

  if(data[i]==a)//找到相同数据就删除

  {

   for(int j=ij<lon-1j++)

   {

    data[j]=data[j+1]    //删除相同数据

   }

   i--

   lon--

   mak++       //标志有进位就说明有删除

  }

 }

 if(mak>0)   //有删除就返回真

  return true

 else

  return false

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6721838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存