📅  最后修改于: 2023-12-03 14:50:19.001000             🧑  作者: Mango
在 C 编程语言中,有多种可以用来删除字符串中的字符或子字符串的函数。这些函数包括:
strcpy
函数可以将一个字符串复制到另一个字符串中。因此,如果你想删除一个字符串中的某个字符,可以将该字符串中那个字符之后的部分复制到该字符的位置上。
char* deleteChar(char* str, char c) {
char* p = str;
while (*p) {
if (*p == c) {
strcpy(p, p+1);
} else {
p++;
}
}
return str;
}
在上面的示例代码中,deleteChar
函数接受一个指向字符串的指针和指定要删除的字符。它使用 strcpy
函数将空终止字符之后的字符串从该字符处向前移动一个位置,以达到删除该字符的目的。它然后一遍又一遍重复这个过程,在字符串中找到每一个要删除的字符,直到遍历完整个字符串。最后,该函数返回修改后的字符串。
需要注意的是,strcpy
函数会复制整个字符串,包括空终止字符。因此,在实现函数时,必须将指向字符串的指针作为返回值返回,以确保空终止字符正确被复制。
memmove
函数可以在内存中移动一段数据,这使它成为从字符串中删除子字符串的理想选择。与 strcpy
不同,memmove
可以在原字符串中就地操作,而不需要在新的缓冲区中复制数据。这有助于减少内存占用和提高性能。
char* deleteSubStr(char* str, char* sub) {
int len = strlen(sub);
char* p = strstr(str, sub);
while (p != NULL) {
memmove(p, p+len, strlen(p+len)+1);
p = strstr(str, sub);
}
return str;
}
在上面的示例代码中,deleteSubStr
函数接受两个指向字符串的指针,分别指向主字符串和要删除的子字符串。它使用 strstr
函数在主字符串中查找子字符串的第一次出现,并使用 memmove
函数将子字符串之后的字符移动到子字符串所在位置,以达到删除子字符串的目的。然后,它重复这个过程直到找到的子字符串为 NULL
(即子字符串不存在于主字符串中)。
需要注意的是,memmove
函数尽管比 strcpy
快,但是如果目标内存与源内存重叠,它不会引起任何问题。