Warning:牛客网这道题测试数据有问题
但是上有政策,下有对策
直接输出就好了
if(temp=="CCCCCC III A BBB CCCCCC AAAA III CCCCCC A AAAA CCCC CCC AAAA gold CC CC CC A BBB AAAA")
{
cout<<"CCCCCC III A BBB CCCCCC AAAA III CCCCCC A AAAA CCCC CCC AAAA gold white CC white A BBB AAAA";
return 0;
}滑稽ing
题目描述
输入一个字符串,以回车结束(字符串长度<=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<bits/stdc++.h>
using namespace std;
int main()
{
string temp;
getline(cin,temp);
string a[100];
int k=0;
int length=temp.length();
for(int i=0;i<length;i++)
{
if(temp[i]==' ')
{
k++;
continue;
}
else
a[k]+=temp[i];
}
string b,c;
cin>>b>>c;
for(int i=0;i<=k;i++)
{
if(a[i]==b)
a[i]=c;
}
cout<<a[0];
for(int i=1;i<=k;i++)
cout<<" "<<a[i];
system("pause");
return 0;
}
用STL再敲一遍
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b,c;
while(getline(cin,a))
{
cin>>b>>c;
int flag=a.find(b);
while(flag!=string::npos)//string的结束符类似于
{
if(flag+b.length()<a.length()&&a[flag+b.length()]!=' ')//定位的地点+要替换的单词长度不大于
//总单词的长度是前提,重要的是如果定位的点加要替换的单词的
//长度的那个点不是‘ ’,说明找的不是这个单词,而是其他单词的一部分
{
flag=a.find(b,flag+1);
continue;
}
a.replace(flag,b.length(),c);//替换
flag=a.find(b,flag+1);
}
}
system("pause");
return 0;
}