本关任务:编写一个函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针
时间: 2023-08-07 12:02:54 浏览: 206
文思的题--输入字符串S3,将在S1中的出现的字符串S2都替换成S3[文].pdf
好的,我的回答如下:
对于这个问题,你可以使用以下函数来实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *ReplaceString(char *str, char *s1, char *s2) {
char *result; // 存储替换后的字符串
char *p; // 临时指针
int len1, len2, len3, i, count = 0; // 字符串长度及计数器
len1 = strlen(str);
len2 = strlen(s1);
len3 = strlen(s2);
// 计算需要分配的内存空间
for (i = 0; i < len1; i++) {
if (strstr(&str[i], s1) == &str[i]) {
count++;
i += len2 - 1;
}
}
result = (char *)malloc(len1 + (len3 - len2) * count + 1);
i = 0;
while (*str) {
if (strstr(str, s1) == str) {
p = s2;
while (*p) {
result[i++] = *p++;
}
str += len2;
} else {
result[i++] = *str++;
}
}
result[i] = '\0';
return result;
}
```
这个函数的实现原理是遍历原始字符串,查找需要替换的子字符串,并分配足够的内存来存储替换后的字符串。然后,将新字符串的内容复制到新分配的内存空间中,并返回该内存空间的指针。
需要注意的是,该函数使用了动态内存分配,因此调用者需要负责释放返回的字符串指针。
使用示例:
```c
int main() {
char *str = "Hello, world!";
char *s1 = "world";
char *s2 = "everyone";
char *result = ReplaceString(str, s1, s2);
printf("%s\n", result);
free(result); // 释放动态分配的内存空间
return 0;
}
```
阅读全文