题目描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格。
输出
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入 Copy
I love Tian Qin
I
You
样例输出 Copy
You love Tian Qin
代码
代码1:
在codeup上提示“运行错误0”!
但我不知道错在哪里?好痛苦,求高人指点!
#include<stdio.h> //提示“运行错误0”
#include<string.h>
int main(){
char s[200],a[110],b[110];
while(gets(s)&&gets(a)&&gets(b))
{
int alen=strlen(a);
int blen=strlen(b);
int slen=strlen(s);
int i,j,u,k;
for(i=0;i<slen;i++){
if(s[i]==a[0]){
u=i+1;
for(j=1;j<alen;j++){
if(s[u]!=a[j]) break;
else u++;
}
if(j==alen&&(s[i+alen]=='\0'||s[i+alen]==' '||s[i+alen]==','||s[i+alen]=='.'))
{
for(k=i+alen;k<slen;k++){
s[k-alen]=s[k];
}
slen=slen-alen;
s[slen]='\0';
for(k=slen-1;k>=i;k--){
s[k+blen]=s[k];
}
slen=slen+blen;
s[slen]='\0';
for(k=0;k<blen;k++){
s[k+i]=b[k];
}
}
}
}
printf("%s\n",s);
}
return 0;
}
代码2:此代码在codeup上是可以通过的。
#include <stdio.h>
#include <string.h>
int main()
{
char s[200],a[110],b[110];
while(gets(s)&&gets(a)&&gets(b)){
char s1[200];
int i=0,j=0,len=0;
while(s[i]!='\0'){
s1[len++]=s[i];
if(s[i]==a[j]){
j++;
}
else{
j=0;
}
if(j==strlen(a)&&(s[i+1]==' '||s[i+1]==','||s[i+1]=='.'||s[i+1]=='\0')){
len=len-strlen(a);
int k=0;
while(b[k]!='\0'){
s1[len++]=b[k];
k++;
}
}
i++;
}
s1[len]='\0';
printf("%s\n",s1);
}
return 0;
}