本关任务:编写一个函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针。 题目中已经给出main函数,main函数会调用ReplaceString函数进行测试,依次输入字符串str、s1和s2,最后输出替换后字符串。
时间: 2024-03-10 22:48:45 浏览: 385
在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。
以下是实现ReplaceString函数的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *ReplaceString(char *str, char *s1, char *s2) {
char *result; // 用于存储替换后的字符串
char *p; // 用于记录匹配位置
char *temp; // 用于存储替换过程中的中间结果
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = strlen(str);
// 统计需要替换的次数
int count = 0;
p = str;
while ((p = strstr(p, s1)) != NULL) {
count++;
p += len1;
}
// 分配空间存储替换后的字符串
result = (char*)malloc(sizeof(char) * (len - count * (len1 - len2) + 1));
if (result == NULL) {
printf("Error: Memory not enough!\n");
exit(1);
}
// 替换字符串
p = str;
temp = result;
while ((p = strstr(p, s1)) != NULL) {
strncpy(temp, str, p - str); // 复制匹配位置之前的部分
temp += p - str;
str = p + len1; // 更新str指针到下一个匹配位置
strncpy(temp, s2, len2); // 复制替换后的字符串
temp += len2;
}
strcpy(temp, str); // 复制最后一个匹配位置之后的部分
return result;
}
int main() {
char str[100], s1[100], s2[100];
char *result;
printf("Please enter the string: ");
scanf("%s", str);
printf("Please enter the string you want to replace: ");
scanf("%s", s1);
printf("Please enter the string you want to replace with: ");
scanf("%s", s2);
result = ReplaceString(str, s1, s2);
printf("The replaced string is: %s\n", result);
free(result);
return 0;
}
```
函数的实现思路如下:
1. 先统计需要替换的次数,以此计算替换后的字符串的长度;
2. 分配空间存储替换后的字符串;
3. 从左到右依次查找需要替换的字符串,复制匹配位置之前的部分,复制替换后的字符串,继续查找下一个匹配位置,直到字符串末尾。
注意事项:
1. 函数返回的是动态分配的内存,使用完毕后需要手动释放;
2. 在分配空间时,需要考虑替换后的字符串长度可能会变化,因此需要预先计算长度;
3. 在复制字符串时,需要注意长度和位置的计算,避免越界或遗漏部分内容。
阅读全文