C语言编写一个函数实现从源字符串中查找目标字符串,并进行替换。
时间: 2024-02-11 14:05:39 浏览: 76
好的,以下是一个实现方式:
```c
#include <stdio.h>
#include <string.h>
void replace(char *source, char *target, char *replacement) {
char *match = strstr(source, target); // 查找目标字符串
if (match == NULL) {
return; // 没有找到目标字符串,直接返回
}
int target_len = strlen(target);
int replacement_len = strlen(replacement);
int source_len = strlen(source);
int diff_len = replacement_len - target_len; // 替换后字符串长度与目标字符串长度的差
char *p = match + target_len; // 指向目标字符串之后的字符
if (diff_len >= 0) {
// 替换后字符串长度大于等于目标字符串长度
memmove(match + replacement_len, match + target_len, source_len - (match - source) - target_len + 1);
// 将目标字符串之后的部分向后移动
memcpy(match, replacement, replacement_len); // 复制替换字符串到目标字符串位置
} else {
// 替换后字符串长度小于目标字符串长度
memmove(match + replacement_len, p, source_len - (p - source) + 1);
// 将目标字符串之后的部分向后移动
memcpy(match, replacement, replacement_len); // 复制替换字符串到目标字符串位置
}
}
int main() {
char source[] = "We love math!";
char target[] = "math";
char replacement[] = "C Program";
replace(source, target, replacement);
printf("%s\n", source);
return 0;
}
```
输出结果为:
```
We love C Program!
```
该程序的核心是 `replace` 函数,它使用了 C 语言中的 `strstr`、`memcpy` 和 `memmove` 函数。首先,我们使用 `strstr` 函数查找目标字符串,并判断是否找到了目标字符串。然后,我们计算出替换后字符串的长度与目标字符串的长度之差,以便确定目标字符串之后的部分需要向前或向后移动。如果替换后字符串的长度大于等于目标字符串的长度,我们使用 `memmove` 函数将目标字符串之后的部分向后移动,然后使用 `memcpy` 函数将替换字符串复制到目标字符串的位置。如果替换后字符串的长度小于目标字符串的长度,我们同样需要将目标字符串之后的部分向后移动,然后使用 `memcpy` 函数将替换字符串复制到目标字符串的位置。
阅读全文