从一个字符串里删除子串是非常常见的操作,如:
void deletestr(const char *str, const char* sub_str, char *result)
str 指向的是主串,sub_str 是子串,rersult 是处理后的结果。当str 指向 “abcdabcd”、sub_str 指向 “ab" 时,处理完成后的结果是 result 指向 “cdcd”,result 已经分配了和 str 一样长的空间。
通常我们的第一反应就是通过二重循环实现。当出现第一个与子串首字符相同的字符时,开始一个新循环来比较。
显然这个方法是容易想到的,当字符串很长或者子串出现的次数很多时,效率也就不高了,那么可不可以用一重循环来实现呢?我们仔细想想,这个问题是很好解决的。
void deletestr(const char *str, const char* sub_str, char *result) { //获得子串的长度 int sublen = 0; const char *t = sub_str; while(*t++ != '