编写一个C语言函数,实现字符串替换子串。要求输入3个字符串s1,s2,s3,然后在s1中查找是否包含s2,如果包含,则将s1中的所有出现s2的地方替换为s3。
时间: 2025-01-20 19:13:23 浏览: 49
以下是一个C语言函数,用于在字符串中替换子串:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void replace_substring(char *s1, const char *s2, const char *s3) {
char *pos, *temp;
int len1 = strlen(s1);
int len2 = strlen(s2);
int len3 = strlen(s3);
if (len2 == 0) {
return; // 如果s2为空字符串,直接返回
}
pos = strstr(s1, s2); // 查找s2在s1中的位置
while (pos != NULL) {
// 计算替换后的总长度
int new_len = len1 - len2 + len3;
temp = (char *)malloc(new_len + 1);
if (temp == NULL) {
printf("内存分配失败\n");
return;
}
// 复制s1中s2之前的部分
strncpy(temp, s1, pos - s1);
temp[pos - s1] = '\0';
// 拼接s3
strcat(temp, s3);
// 拼接s2之后的部分
strcat(temp, pos + len2);
// 释放原字符串内存并更新指针
free(s1);
s1 = temp;
// 继续查找下一个s2
pos = strstr(s1, s2);
// 更新长度
len1 = strlen(s1);
}
}
int main() {
char s1[1000] = "Hello world! Hello C!";
char s2[] = "Hello";
char s3[] = "Hi";
printf("原始字符串: %s\n", s1);
replace_substring(s1, s2, s3);
printf("替换后的字符串: %s\n", s1);
return 0;
}
```
这个函数的工作原理如下:
1. 使用`strstr`函数查找s2在s1中的位置。
2. 如果找到匹配项,计算替换后的新长度。
3. 分配足够的内存来存储新的字符串。
4. 使用`strncpy`复制s2之前的部分,然后拼接s3。
5. 最后拼接s2之后的部分。
6. 释放原字符串的内存,并更新s1指针。
7. 重复这个过程,直到s1中不再包含s2。
注意事项:
- 函数会直接修改传入的s1字符串。
- 确保s1有足够的内存来存储替换后的字符串。
- 这个实现假设s1是动态分配的。如果s1是静态数组,可能需要使用其他方法。
阅读全文
相关推荐


















