九度[1111]-单词替换
题目描述:
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
多组数据。每组数据输入包括3行,
第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
解题思路:
字符串操作,用的STL的string
(文末链接是另一个思路,注意字符串加空格的思路比较巧妙,且最后需要cin.get()吸收回车)
AC代码-1:
#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
string input, init, rep;
vector<string> vec;
int main(){
freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
while(getline(cin, input)){
getline(cin, init);
getline(cin, rep);
string::size_type idxs = 0, idxe;
while(1){
idxe = input.find(" ", idxs);
if(idxe != string::npos){
vec.push_back(input.substr(idxs, idxe-idxs));
}
else {
vec.push_back(input.substr(idxs));
if(idxe == string::npos) break;
}
idxs = idxe+1;
}
for(int i = 0; i < vec.size(); i++){
if(vec[i] == init){
cout<<rep;
}
else cout<<vec[i];
if(i < vec.size() - 1) cout<<" ";
}
cout<<endl;
vec.clear();
}
fclose(stdin);
return 0;
}
AC代码-2
#include <string>
#include <iostream>
using namespace std;
int main(){
string s, a, b;
freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
while(getline(cin, s)){
cin>>a>>b;
string::size_type idxs = 0, idxe = s.find(" ", idxs);
while(idxe != string::npos){
//cout<<"idxs: "<<idxs<<" idxe: "<<idxe<<" "<<s.substr(idxs, idxe-idxs)<<endl;
if(s.substr(idxs, idxe-idxs) == a) s.replace(idxs, a.size(), b);
idxs = idxe+1;
idxe = s.find(" ", idxs);;
}
if(s.substr(idxs) == a) s.replace(idxs, a.size(), b);
cout<<s<<endl;
cin.get();
}
fclose(stdin);
return 0;
}