题目:编写一个函数,接受三个string参数s、oldval、newval。使用迭代器+insert+erase函数将s中所有oldval替换为newval。
注意:
1、不要比较指向不同的迭代器
2、下标遍历寻找子串用substr成员函数,迭代器遍历寻找子串利用两个迭代器初始化string
方法一(迭代器+erase+insert):
#include<iostream>
#include<string>
using namespace std;
void Replace(string& s, const string& oldval, const string& newval)
{
for (auto i = s.begin(); distance(i, s.end()) >= distance(oldval.begin(), oldval.end());)
{
if (string(i,i + oldval.size() ) == oldval) //注意两个迭代器初始化string
{
i = s.erase(i, i + oldval.size());
i = s.insert(i, newval.begin(), newval.end());
advance(i, newval.size()); //因为string中insert函数返回的是插入的第一个字符的迭代器,所有要加上newval.size()
}
else
++i;
}
}
int main()
{
string str( "To drive straight thru is a foolish, tho courageous act." );
Replace(