该函数接收一个字符串和一个子字符串,并应删除该字符串中所有出现的子字符串。 例如,
string = hello world
substring = hello
该功能应仅打印“ world
”
我应该指出,我只能使用指针来解决此问题。
我已经尝试过,但是它只会删除子字符串的第一个字母的出现。
char* del_all_substr(char *pstr, char *psub){
char *pr = pstr;
char *pw = pstr;
while (*pr){
for (int i = 0; i <strlen(psub);i++) {
*pw = *pr++;
pw += (*pw != *(psub+i));
}
*pw = '\0';
}
}
int main_tp06(int argc, const char *argv[]){
char str[] = "hello world";
char sub[] = "hello";
del_all_substr(str,sub);
printf("%s",str);
return 0 ;
}
答案 0 :(得分:0)
您可以反复使用strstr
查找所有出现的字符串。例如,考虑此字符串"Hello world, Hello world"
,并说我们想从字符串中移出所有出现的"Hello"
。您可以使用strstr
查找"Hello"
的第一个实例,然后可以使用memmove将字符串中的所有内容移回(请确保也移动nul终止符)来覆盖它,并再次重复再次,直到strstr
不返回匹配项为止。您还可以通过分配自己的至少为strlen(pstr)
个字节的字符串,然后逐个字节地从pstr
个字节中复制数据,而不是复制与psub
相匹配的字节,来避免这种方法。>