题目1111:单词替换
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2877
解决:809
-
题目描述:
-
输入一个字符串,以回车结束(字符串长度<=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
这道题本来是比较简单的字符串处理题,用string类里的查找函数find(),和替换函数repalce()即可处理,
但是这道题很容易犯一个细节性的错误,就可能你查找到的并非是整个单词,而是单词的一部分,就比如
Youwant someone to help you
You
I这时就不能把”Youwant“中的替换”You“给替换了。所以在这道题里,我们在源串里查找到这个字符串以后,
需要对其判断这个查找到的字符串到底是整个单词还是单词的一部分。
源代码如下:
#include<iostream> #include<string> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int main() { string src; string s,s1; while(getline(cin,src)) { getline(cin,s); getline(cin,s1); int flag=src.find(s); while(flag!=string::npos) { if(flag+s.size()<src.size() && src[flag+s.size()]!=' ') { flag=src.find(s,flag+1); continue; } src.replace(flag,s.size(),s1); flag=src.find(s,flag+1); } cout<<src<<endl; } return 0; }