题目描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格。
输出
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入
I love Tian Qin
I
You
样例输出
You love Tian Qin
解答
#include<iostream>
#include<cstring>
using namespace std;
int main(void){
string input;
string find_word;
string replace_word;
while(getline(cin,input)){
input = " " + input + " ";
getline(cin,find_word);
getline(cin,replace_word);
find_word = " " + find_word + " ";
replace_word = " " + replace_word + " ";
int pos = 0;
while ((pos = input.find(find_word)) != -1){
input.replace(pos,find_word.size(),replace_word);
}
input.erase(0,1);
input.erase(input.size(),1);
cout << input << endl;
}
}
思路
首先看题目的描述是要我们找出一个字符串中出现的所有满足条件的单词,这里就要进行字符串的查找了,所以用C++会更好一些,操作更加方便,直接用while循环加上find函数就可以进行查找了。
但直接用题目里给的单词进行查找就有一个弊端,如果你要将 you 替换为me ,在主串中如果有 your 这个单词就会被替换成 mer,不符合条件了,所以这里做了一个小小的改动,将所有的输入都在开头和结尾加了空格,这样在进行子串的查找时就不会出现上述情况了,在输出时利用erase函数将开头结尾去掉就可以了