char *ReplaceString(char * str, char * s1, char * s2)
时间: 2023-07-23 17:27:57 浏览: 86
浅析string 与char* char[]之间的转换
5星 · 资源好评率100%
函数名为 ReplaceString,它接受三个参数:一个指向字符串的指针 str,一个指向字符串的指针 s1,一个指向字符串的指针 s2。函数的返回值是一个指向字符的指针,它指向一个新的字符串,该字符串是在 str 中将所有出现的 s1 字符串替换为 s2 字符串后得到的结果。
以下是一个示例实现:
```
char *ReplaceString(char * str, char * s1, char * s2) {
int s1_len = strlen(s1);
int s2_len = strlen(s2);
int str_len = strlen(str);
int count = 0;
// 统计字符串中 s1 的出现次数
char *ptr = str;
while ((ptr = strstr(ptr, s1)) != NULL) {
count++;
ptr += s1_len;
}
// 分配内存来存储新的字符串
int new_str_len = str_len + count * (s2_len - s1_len) + 1;
char *new_str = (char *)malloc(new_str_len * sizeof(char));
// 复制原始字符串到新的字符串,并替换 s1
ptr = str;
char *new_ptr = new_str;
while (*ptr) {
if (strstr(ptr, s1) == ptr) {
strcpy(new_ptr, s2);
new_ptr += s2_len;
ptr += s1_len;
} else {
*new_ptr++ = *ptr++;
}
}
*new_ptr = '\0';
return new_str;
}
```
在上述代码中,我们首先计算了 s1、s2 和 str 的长度,以及 s1 在 str 中出现的次数。接着,我们根据新字符串的长度分配了足够的内存,并将原始字符串复制到新字符串中,并替换 s1 字符串。最后,我们返回了新字符串的指针。
需要注意的是,由于新字符串是在函数内部动态分配的,因此在使用完毕后需要手动释放内存,以避免内存泄漏。例如:
```
char *new_str = ReplaceString(str, s1, s2);
// 使用 new_str
free(new_str);
```
阅读全文