c语言删除重复字符的函数 c语言删除重复字符的函数是什么

C语言 删除重复字符程序的基本思路是把输入的字符串放到a[100]字符组中,然后把a[100]中所有不重复的字符添加到b[100]中,间接完成对字符串中的重复字符的删除
#includestdio.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=0;a[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=0;ipb;i++)
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]中的字符串,也就是删除过重复字符之后的了
}
C语言编写一个函数,将字符串中连续重复出现的字符去除C语言自定义函数,一次性去除连续重复字符,参考代码如下:
#includestdio.h
char *fun(char *str)
{
int i=1,j=0;
if(str==NULL)
return NULL;
if(str[0]==0)
return str;
while(str[i]!=0)
if(str[j]!=str[i])
str[++j]=str[i++];
else ++i;
str[j+1]=0;
return str;
}
int main()
{
char str[500];
gets(str);
puts(fun(str));
return 0;
}
C语言中删除重复字节for(p=str;*p;p++)
{
for(q=p+1;*q==*p;q++)
strcpy(p,q);
}
问题应该出现在上边这段
代码
上,你的那个例子如果多写一个e的话就能输出adefqsw
只要你输入的
字符
中有一个
字母
重复了三次 , 那么你的
程序
就只会删掉一个
for(p=str;*p;p++)
{
q
=
p
+
1;
for(q;*q;q++)
{
if(*q==*p)
{
strcpy(p,q);
--q;
}
}
}
你的
语法
我看的不是很懂(毕竟C语言咱刚入门),所以我改了一下,上边的代码可以修复你的两个e的问题
本人猜测应该是三个e中,第二个e被HX了 , 这是q指向了第三个e
后面
的元素,所以会出现漏一个的情况,所以执行完HX之后要把q“拉”回来
一上只是个人观点,
我的代码
不是很高效 , 建议你再优化一下
用C语言中的指针编写一个删除字符串中重复字符的函数#includestdio.h
void fun(char *str) { char *p; int f[256],i;
for ( i=0;i256;i++ ) f[i]=0;
p=str;
while ( *p ) {
if ( f[*p]==0 ) { *str=*p; str++; }
f[*p]++;
p++;
}
*str=0;
}
void main() { char str[256];
gets(str); fun(str); printf("%s\n",str);
}
纠错:C语言:删除重复字符 。没注释, 还不如重新写一个

推荐阅读