题目描述
单词替换,在包含空格的字符串s中,找到单词a,用b替换a并输出替换后的字符串s。
思路
笨方法,在s中找到a的首字符位置,诸位判断是否一致,且是独立的单词,再替换。
判断是单词的思路:
1. 左:匹配的位置pos要么是0,要么pos-1是空格,否则不是完整的单词;
2. 右:位置+单词长度+1 这一位必须是空格或\0,否则不是完整的单词;
3. 不论是否替换,这个位置已经处理完毕,下一次要从pos+1开始匹配;
find函数
s.find(a, index);
从index这一位往后,寻找s中匹配a的索引位置。
完整代码
#include<iostream>
#include<string>
using namespace std;
int main(){
string s, a, b;
getline(cin, s);
cin >> a >> b;
int pos = s.find(a), i = 0, j;
while(pos != -1){
int flag = 1;
for(j=pos;j<pos+a.size();j++){
if(s[j] != a[j-pos]){
flag = 0;
}
}
if(s[j] != ' ' && s[j] != '\0'){
flag = 0;
}
if(s[pos-1] != ' ' && pos != 0){
flag = 0;
}
if(flag){
s.replace(pos, a.size(), b);
}
i = pos+1;
pos = s.find(a, i);
}
cout << s << endl;
return 0;
}