如何消除重复的字符

时间:2015-11-20 19:33:13

标签: c

这是一种消除相同字符序列并用一个字符替换它们的算法,但它不起作用。有些帮助吗?

#include<stdio.h>
#include<string.h>

int main ()
{
char ch[100],ch1[100]="",ch2[100];
int i;

gets(ch);

i=0;

while(i<strlen(ch)-1)
{
    if(ch[i]==ch[i+1])
    {

        strncpy(ch1,ch,i);

        strcat(ch1,ch+i+1);

        sprintf(ch,"%s",ch1);
    }
    else 
     i++;

}

puts(ch);

return 1;
}

1 个答案:

答案 0 :(得分:0)

主要问题在于:

strncpy(ch1,ch,i);

如果strncpy函数在i的前ch个字符中找不到,则ch1函数不会添加NULL终止字符。第一次通过循环很好,因为strcat被初始化,但是后续迭代它包含它最后的任何东西。所以,当你到达strncpy时,它会附加到之前的那里。

调用strncpy(ch1,ch,i); ch1[i] = '\0'; 后,您需要自己添加NULL终结符:

gets

此外,请勿使用fgets。它没有进行适当的边界检查。相反,请使用fgets(ch, sizeof(ch), stdin);

data.frame