编写一个函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针。
时间: 2023-08-07 09:03:22 浏览: 89
好的,以下是一个可能的实现:
```
#include <stdlib.h>
#include <string.h>
char *ReplaceString(char *str, char *s1, char *s2) {
// 计算新字符串的长度
int len = strlen(str);
int s1len = strlen(s1);
int s2len = strlen(s2);
int count = 0;
char *p = str;
while ((p = strstr(p, s1)) != NULL) {
count++;
p += s1len;
}
int newlen = len + count * (s2len - s1len);
// 分配新字符串的内存
char *newstr = (char *)malloc(newlen + 1);
if (newstr == NULL) {
return NULL;
}
// 复制字符串并替换子串
char *q = newstr;
p = str;
while ((p = strstr(p, s1)) != NULL) {
int n = p - str;
memcpy(q, str, n);
q += n;
memcpy(q, s2, s2len);
q += s2len;
p += s1len;
str = p;
}
strcpy(q, str);
return newstr;
}
```
该函数首先计算新字符串的长度,然后分配新字符串的内存空间。接着,它复制旧字符串,每当发现一个需要替换的子串时就在新字符串中替换它,最后返回新字符串的指针。
你可以这样使用该函数:
```
char str[] = "hello, world!";
char *newstr = ReplaceString(str, "world", "universe");
printf("%s\n", newstr);
free(newstr);
```
输出应该是 "hello, universe!"。注意,你需要在使用完新字符串后释放它的内存。
阅读全文