【问题描述】 将字符串str中的子字符串s1替换成新的子字符串s2(字符串长度<100),如果字符串str中有多个s1,则应全部替换,最后输出被替换后的str字符串。 【输入形式】 输入3行,第一行是:字符串,第二行是:被替换子串,第三行是:替换子串 【输出形式】 替换后的字符串 【样例输入1】 hello word! word C program 【样例输出1】 hello C program! 【样例输入2】 hello word! o w 【样例输出2】 hellw wwrd!#include<stdio.h> #include<string.h> int main() { char str[100],s1[100],s2[100]; gets(str); gets(s1); gets(s2); char *p=strstr(str,s1); if (p!=NULL) { char temp[100]; strncpy(temp,str,p-str); temp[p-str]='\0'; strcat(temp,s2); strcat(temp,p+strlen(s1)); strcpy(str,temp); } puts(str); return 0; }
时间: 2024-03-16 07:46:49 浏览: 101
把符串中的一子串替换为另一子串
这段代码存在几个问题:
1. 使用了已经被废弃的`gets`函数,应该使用`fgets`函数代替。
2. 在使用`strncpy`函数拷贝字符串时,需要保证源字符串以'\0'结尾。
3. 在使用`strncpy`函数拷贝字符串时,需要手动添加'\0',即`temp[p-str] = '\0'`。
4. 在使用`strcat`函数拼接字符串时,需要保证目标字符串有足够的空间。
下面是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100], s1[100], s2[100];
fgets(str, 100, stdin);
fgets(s1, 100, stdin);
fgets(s2, 100, stdin);
str[strlen(str) - 1] = '\0'; // 去掉fgets函数读入的换行符
s1[strlen(s1) - 1] = '\0';
s2[strlen(s2) - 1] = '\0';
char *p = strstr(str, s1);
while (p != NULL) {
char temp[100];
strncpy(temp, str, p - str);
temp[p - str] = '\0'; // 需要手动添加'\0'
strcat(temp, s2);
strcat(temp, p + strlen(s1));
strcpy(str, temp);
p = strstr(str, s1);
}
printf("%s\n", str);
return 0;
}
```
注意,这段代码中使用了一个`while`循环,可以实现将字符串中所有的子字符串都替换。
阅读全文