#include<stdio.h> #include<string.h> int main() { char str[100],s1[100],s2[100]; puts(str); puts(s1); puts(s2); char *p=strstr(str,s1); if (p!=NULL) { char temp[100]; strncpy(temp,str,p-str); strcat(temp,s2); strcat(temp,p+strlen(s1)); strcpy(str,temp); } puts(str); return 0; } 哪里有问题【问题描述】 将字符串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!
时间: 2024-03-16 20:46:40 浏览: 50
c语言怎么进行字符串比较.docx
这段代码存在几个问题:
1. 没有读入输入的三行字符串,需要使用`fgets`函数读入。
2. 使用`puts`函数输出字符串时,需要先将字符串赋值。
3. 在使用`strstr`函数查找子字符串时,需要保证输入的两个字符串都已经读入和赋值。
4. 在使用`strncpy`函数拷贝字符串时,需要保证源字符串以'\0'结尾。
下面是修改后的代码:
```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`循环,可以实现将字符串中所有的子字符串都替换。
阅读全文