这是一种消除相同字符序列并用一个字符替换它们的算法,但它不起作用。有些帮助吗?
#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;
}
答案 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