如abcdefg 删除子字符串ef后得到abcdg,被删除的字符串必须全部连续匹配上才算,子字符有可能出现多次。
一次扫描,变扫描边删除。这么简单的题目当时因为紧张没有写出来,太遗憾了。
#include <string.h>
#include <stdio.h>
#include <assert.h>
void deletestr(char str[], char substr[])
{
char *p, *q, *end;
int i, j, len;
assert(str != NULL && substr != NULL);
len = strlen(substr);
p = str;
end = str;
i = j = 0;
while (*p != '\0')
{
while (*(p+i) != '\0' && *(substr+j) != '\0' && *(p+i) == *(substr+j))
{
i++;
j++;
}
if (j < len)
{
if (end == p)
{
end++;
p++;
}
else
{
*end = *p;
end++;
p++;
}
}
else
{
p = p + i;
i = 0;
j = 0;
}
}
*end = '\0';
printf("The final str is %s", str);
}
void main(void)
{
char a[] = "aacdeaacds";
char b[] = "acd";
deletestr (a, b);
}
result:
aeas