定义指向原字符串的指针 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 语言中字符串的子串。需要注意的是,第二种方法可能会导致原字符串的长度改变,因此需要格外小心。