最近因为因为一些事情需要回顾c语言数组去重的算法,在网上查阅了很多文档和别人写的算法,看了着实有点烦。于是自己总结了两种!
也可以算作最容易理解的2种c语言实现:数组去重的方法吧(哈哈哈哈)
不信往下看!!
代码块:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int fun(char s[]);
int delete(char s[]);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
- [ ] //删除字符串中重复的数组,返回被删除的数字的个数
int main() {
char s[]="1111123345668888";
int k;
k=fun(s);
// k=delete(s);
puts(s);
printf("%d\n",k);
return 0;
}
//方法 2: 给每个数字字符一个出现次数的限制条件。只有第一次(只有为0)出现才能保存起来,
//并设置它的次数为1,这样下次再一次出现重复数字时就不会保存了。。
int fun(char s[]){
int flag[30]={0},i,num=0,len;
char t[100];
len=strlen(s);
for(i=0;i<len;i++){
if(flag[s[i]-'0']==0){
t[num++]=s[i];
flag[s[i]-'0']=1;
}
}
t[num]=0;
strcpy(s,t);
return num;
}
//方法1:从第一次数字字符往后遍历,默认当前字符为新的字符,如果后面的字符与当前字符相同,
//就设置falg标志为0,即重复的字符,只有flag为1时,才能保存到数组里。 最后拷贝到原来的数组中,
//从而实现数组去重!
int delete(char s[])
{
char t[100];
int i,j,num=0,len,flag;
len=strlen(s);
for(i=0;i<len;i++)
{
flag=1;
for(j=i+1;j<len;j++)
if(s[i]==s[j])flag=0;
if(flag)t[num++]=s[i]; //只有当前元素在后面找不到重复元素时,则保存到新数组中。
}
t[num]=0;
strcpy(s,t);//把去除重复后的元素重新赋值给原数组
return num;
}
运行界面图: