【题目描述】
输入一个字符串,以回车结束(字符串长度≤200)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
【输入】
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 ≤ 100);
第3行是a将被替换的单词b(长度 ≤ 100)。
s,a,b最前面和最后面都没有空格。
【输出】
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
【输入样例】
You want someone to help you
You
I
【输出样例】
I want someone to help you
有两种方法,思路都差不多,就是输入输出有些区别,都可以看看
方法一:利用字符串流
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
string str[101];
string s1;
stringstream ss; //字符串流
ss<<s; //把字符串s传到字符串流里
int cnt=0;
while(ss>>s1) //再把字符串流传到一个新的字符串里,这里遇到空格断开,没单词传时结束
{
str[cnt]=s1; //把单词都放到字符串数组里,一个cnt存一个单词
cnt++;
}
string s2,s3;
cin>>s2>>s3; //输入替换的单词和被替换的单词
int i;
for(i=0;i<cnt;i++)
{
if(str[i]==s2)
str[i]=s3;
}
for(i=0;i<cnt;i++)
cout<<str[i]<<" "; //最后输出替换过后的语句。
return 0;
}
方法二:利用单词之间的空格
#include<bits/stdc++.h>
using namespace std;
string str[101],s,s1; //字符串数组,替换和被替换的单词
void out(int i)
{
if(s==str[i]) //需要替换,就输出替换后的单词
cout<<s1<<" ";
else
cout<<str[i]<<" "; //不然就输出原本单词
}
int main()
{
int i,n=0;
char space;
do //由于至少需要输入一个单词,因此使用do-while结构输入
{
n++;
cin>>str[n]; //输入一个单词(字符组),cin读到空格自动结束
scanf("%c",&space);//读入一个空格
}
while(space==' '); //先读入单词,一直到最后一个单词,也就是读不到空格的时候
cin>>s>>s1; //输入代替换的单词与要替换的单词
for(i=1; i<=n; i++) //从第一个单词开始枚举
out(i); //调用函数进行判断,是否需要替换
return 0;
}