本关任务:编写一个函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针。 题目中已经给出main函数,main函数会调用ReplaceString函数进行测试,依次输入字符串str、s1和s2,最后输出替换后字符串
时间: 2024-03-09 07:47:08 浏览: 57
下面是实现ReplaceString函数的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *ReplaceString(char * str, char * s1, char * s2) {
int len_str = strlen(str);
int len_s1 = strlen(s1);
int len_s2 = strlen(s2);
int count = 0;
char *p = NULL;
// 统计需要替换的次数
p = strstr(str, s1);
while (p != NULL) {
count++;
p = strstr(p + len_s1, s1);
}
// 计算替换后的字符串长度
int len_new = len_str + count * (len_s2 - len_s1) + 1;
char *new_str = (char *)malloc(len_new * sizeof(char));
if (new_str == NULL) {
return NULL;
}
// 进行字符串替换
p = str;
char *q = new_str;
while (*p != '\0') {
if (strstr(p, s1) == p) {
strcpy(q, s2);
q += len_s2;
p += len_s1;
} else {
*q++ = *p++;
}
}
*q = '\0';
return new_str;
}
int main() {
char str[100], s1[10], s2[10];
printf("Please input the string:\n");
gets(str);
printf("Please input the string you want to replace:\n");
gets(s1);
printf("Please input the string you want to replace with:\n");
gets(s2);
char *new_str = ReplaceString(str, s1, s2);
printf("The string after replacement is:\n%s\n", new_str);
free(new_str);
return 0;
}
```
注意事项:
1. 在统计需要替换的次数时,应该使用strstr函数,而不是strcmp函数。
2. 在进行字符串替换时,应该使用strcpy函数,而不是直接赋值。赋值会导致内存访问错误。
3. 使用malloc分配内存后,一定要检查是否分配成功。
4. 在使用gets函数读取字符串时,要注意输入长度,防止缓冲区溢出。更好的做法是使用fgets函数,指定读取的最大字符数。