📜  删除字符串函数 - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:50:19.001000             🧑  作者: Mango

删除字符串函数 - C 编程语言

在 C 编程语言中,有多种可以用来删除字符串中的字符或子字符串的函数。这些函数包括:

1. strcpy 函数

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 函数会复制整个字符串,包括空终止字符。因此,在实现函数时,必须将指向字符串的指针作为返回值返回,以确保空终止字符正确被复制。

2. memmove 函数

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 快,但是如果目标内存与源内存重叠,它不会引起任何问题。