• 定义指向原字符串的指针 p,指向要删除的子串的指针 q,以及一个新字符串的指针 r;
  • 遍历原字符串,将不包含子串的字符依次复制到新字符串中;
  • 最后,将新字符串的结束符 '\0' 赋值给原字符串的结束符,即完成了删除操作。
  • 以下是示例代码:

    #include <stdio.h>
    #include <string.h>
    void deleteSubstring(char* str, const char* sub) {
        size_t len = strlen(sub);
        char* p = str;
        char* q = strstr(p, sub);
        char* r = p;
        while (q != NULL) {
            while (p != q) {
                *r++ = *p++;
            p += len;
            q = strstr(p, sub);
        while ((*r++ = *p++) != '\0');
    int main() {
        char str[100] = "hello world";
        const char sub[10] = "llo";
        deleteSubstring(str, sub);
        printf("%s", str);
        return 0;
    

    方法二:使用库函数

    除了自己编写删除子串的函数外,还可以使用 C 语言标准库函数中的字符串处理函数来删除子串。常用的函数包括:

  • memmove:将内存块移动到另一个位置;
  • strcpy:将字符串复制到另一个位置;
  • strlen:返回字符串的长度。
  • 具体步骤如下:

  • 定义指向原字符串的指针 p,指向要删除的子串的指针 q;
  • 使用 memmove 函数将要删除的子串后面的字符向前移动,覆盖掉要删除的子串;
  • 使用 strcpy 函数将新字符串的结束符 '\0' 复制到正确的位置。
  • 以下是示例代码:

    #include <stdio.h>
    #include <string.h>
    void deleteSubstring(char* str, const char* sub) {
        size_t len = strlen(sub);
        char* p = str;
        char* q = strstr(p, sub);
        while (q != NULL) {
            memmove(q, q+len, strlen(q+len)+1);
            q = strstr(p, sub);
    int main() {
        char str[100] = "hello world";
        const char sub[10] = "llo";
        deleteSubstring(str, sub);
        printf("%s", str);
        return 0;
    

    以上两种方法都可以用来删除 C 语言中字符串的子串。需要注意的是,第二种方法可能会导致原字符串的长度改变,因此需要格外小心。

  •