第1个回答 2014-06-27
编写实现删除字符串中指定字符串并将后面的前移。
void delete(char s[],char t[])
{
int i,j,k;
int flag=0;
for( i=j=0; s[i]!='\0';i++)
{
for( k=0; t[k]!='\0';k++)
{
if(s[i+k]==t[k]) flag=1;
else
{
flag=0;
break;
}
}
if(flag)
{
s[j++]=s[i+k];
i=i+k+1;
}
if(!flag) s[j++]=s[i];
}
s[j]='\0';
printf("%s\n",s);
}
main()
{
char str1[255],str2[255];
printf("please input the article:\n");
gets(str1);
printf("please input the words you want to delete:\n");
gets(str2);
delete(str1,str2);
}
那个删除是成功的,但是没有前移
分享到:
2008-12-25 16:36
提问者采纳
#include <stdio.h>
#include <string.h>
void delete1(char s[],char t[])
{
int i,j,k;
int flag=0;
//一:代码缺陷
//增加判断。应该
if(!s || !t)
{
return;
}
if(strlen(s) < strlen(t))
{
return;
}
for( i=j=0; s[i]!='\0';i++)
{
for( k=0; t[k]!='\0';k++)
{
if(s[i+k]==t[k]) flag=1;
else
{
flag=0;
break;
}
}
//二,逻辑错误
/*if(flag)
{
s[j++]=s[i+k];
i=i+k+1;
} */
//改成
if(flag)
{
strcpy(&s[i], &s[i + k]);
}
//if(!flag) s[j++]=s[i];
if(!flag) continue;
}
//s[j]='\0';
printf("%s\n",s);
}
main()
{
char str1[255],str2[255];
printf("please input the article:\n");
gets(str1);
printf("please input the words you want to delete:\n");
gets(str2);
delete1(str1,str2);
}