老师布置了一道题,感觉比较可以。
例如母字符串为:abababababccccc,子字符串为abc。删除中间的abc后,会产生新的abc子字符串,我们应该再次遍历该母字符串,查找是否产生了新的子字符串。
具体程序如下(这里说明下,用自己的strcat函数,因为库函数的strcat有问题,不能用在本身的字符串身上)
//删除字符串中的子串
#include
#include
#include
int delestr(char str[],char * cstr);
char * mystrcat(char * str1,const char * str2);
int main (int argc, char *argv[])
{
char str[]="dfdsabcababababcccccccdfds";
char * cstr = "abc";
delestr(str,cstr);
printf("%s\n",str);
return 0;
}
int delestr(char str[],char * cstr)
{
char * p = str;
bool flag = true;
int len = strlen(cstr);
while(flag)
{
flag=false; //准备结束这次循环,如果下面没有找到子字符串,这次while就完了。
while(*str)
{
if(*str == *cstr)
{
if(strncmp(str,cstr,len) == 0)
{
*str = 0;
mystrcat(p,str+len);
flag = true; //如果删除了,就可能产生新的子字符串,置位flag,再次循环查找
}
}
str++;
}
str = p;
}
return 0;
}
char * mystrcat(char *dest, const char *src)
{
char *p = dest;
while(*dest)
dest++;
while(*dest++ = *src++);
return p;
}