题目:删除子串,只要是原串中有相同的子串就删掉,不管多少个,返回子串个数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
int f(const char *str,const char *sub_str,char *result)
{
assert((str != NULL) && (sub_str != NULL));
const char *p = str;
const char *q = sub_str;
char *t = result;
int len = strlen(q); //子串长度
int count = 0;
while(*p)
{
if(*p == *q)
{
char *temp = (char*)malloc(len + 1);
memset(temp,'\0',len+1);
// char *temp = new char[len+1];
strncpy(temp,p,len);
if(strcmp(temp,sub_str) == 0)
{
++count;
p = p + len;
}
else
*t++ = *p++;
free(temp);
}
else
*t++ = *p++;
}
return count;
}
int main()
{
char s[100] = "";
int num = f("123abc12de234fghi34j123k","123",s);
printf("The number of sub_str is %d\n",num);
printf("The result string is %s\n",s);
return 0;
}
针对于这一道题来说,里面还是有很多值得去思考的地方:如const的运用,assert宏,动态分配内存并赋初值和内存释放,各种字符串处理函数的熟悉程度;
最后有一个地方要提出来assert是一个宏而非函数;