c语言子串的删除算法
时间: 2024-09-23 12:11:02 浏览: 41
在C语言中,删除字符串中的子串通常涉及到对原始字符串进行操作,最常见的做法是使用指针和数组。这里有一个简单的示例,假设我们想从一个字符串`str`中删除指定的子串`substr`:
```c
#include <stdio.h>
#include <string.h>
void delete_substring(char *str, const char *substr) {
int len_str = strlen(str);
int len_substr = strlen(substr);
// 遍历整个字符串
for (int i = 0; i <= len_str - len_substr; ++i) {
// 如果找到子串的起始位置
if (strncmp(&str[i], substr, len_substr) == 0) {
// 移动后续字符到当前位置前
memmove(&str[i+len_substr], &str[i+1], len_str - i - len_substr);
// 更新剩余字符串长度
len_str -= len_substr;
// 如果字符串结束就在删除的位置,则提前终止循环
if (i + len_substr == len_str) {
break;
}
}
}
// 调整指针到新的字符串结尾
str[len_str] = '\0';
}
int main() {
char str[] = "Hello, World!";
char substr[] = "World";
delete_substring(str, substr);
printf("Modified string: %s\n", str);
return 0;
}
```
在这个例子中,我们使用了`memmove`函数来移动字符,因为直接修改指针可能会丢失数据。注意这个删除过程会改变原字符串。
阅读全文