题目描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入描述:
多组数据。每组数据输入包括3行, 第1行是包含多个单词的字符串 s, 第2行是待替换的单词a,(长度<=100) 第3行是a将被替换的单词b。(长度<=100) s, a, b 最前面和最后面都没有空格.
输出描述:
每个测试数据输出只有 1 行, 将s中所有单词a替换成b之后的字符串。
示例1
输入
You want someone to help you You I
输出
I want someone to help you
#include<cstdio>
#include<cstring>
char s[101][105],a[105],b[105],ch;
int main()
{
int op=0,oq=0,i;
while(scanf("%c",&ch) && ch!='\n')
{
if(ch==' ') oq=0,op++;
else s[op][oq++]=ch;
}
gets(a);gets(b);
for( i=0;i<=op;i++)
if(strcmp(s[i],a)==0) strcpy(s[i],b);
for( i=0;i<=op;i++)
i?printf(" %s",s[i]):printf("%s",s[i]);
return 0;
}
本题显然是在读入的时候就按照单词分类比较简单,下面这种方法也可以,但麻烦,容易搞错。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main() {
char str[100],sta[100],stb[100],tmp[100],tp[100];
int i,j,len;
while(gets(str)) {
gets(sta);
gets(stb);
len=strlen(str);
int lenb=strlen(stb);
int start=0,s=0,t=0;
for(i=0; i<len; i++) {
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') {
tp[t++]=str[i];
} else {
tp[t++]='\0';t=0;
if(strcmp(tp,sta)==0) {
for(j=0; j<lenb; j++)
tmp[s++]=stb[j];
tmp[s++]=str[i];
} else {
for(j=start; j<=i; j++)
tmp[s++]=str[j];
}
start=i+1;
}
}
if(str[len-1]>='a'&&str[len-1]<='z'||str[len-1]>='A'&&str[len-1]<='Z')
{
tp[t++]='\0';
if(strcmp(tp,sta)==0) {
for(j=0; j<lenb; j++)
tmp[s++]=stb[j];
tmp[s++]=str[i];
} else {
for(j=start; j<=i-1; j++)
tmp[s++]=str[j];
}
}
tmp[s++]='\0';
puts(tmp);
}
return 0;
}