std::string的replace用例(替换字符串或容器中的某个元素)
栗子1:std::string str1="hello,world,"//把最后一个逗号替换成换行符str1.replace(str1.find_last_of(","),1,"\n");输出结果:栗子2:std::string str2="c++ is a language";//把某个字符替换成新字符,c++替换为javascriptstr2.replace...
·
std::replace 位于#include <algorithm>中
主要作用是替换字符串的字符或者容器的元素
下面看一下 std::replace 的源码:
template<class _FwdIt,class _Ty> inline
void replace(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
_DEBUG_RANGE(_First, _Last);
_Replace_unchecked(_Unchecked(_First), _Unchecked(_Last),
_Oldval, _Newval);
}
_Replace_unchecked 的源码:
_Replace_unchecked 的源码:
template<class _FwdIt,class _Ty> inline
void _Replace_unchecked(_FwdIt _First, _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
for (; _First != _Last; ++_First)
if (*_First == _Oldval)
*_First = _Newval;
}
发现其主要采用的是泛型编程即模板编程的方法,
通过遍历传入进来的_First,如果_First不等于_Last,就会继续遍历,
直到找到我们想替换的_Oldval,然后通过赋值操作进行替换。
栗子1:
std::string str1="hello,world,"
//把最后一个逗号替换成换行符
str1.replace(str1.find_last_of(","),1,"\n");
输出结果:
栗子2:
std::string str2="c++ is a language";
//把某个字符替换成新字符,c++替换为javascript
str2.replace(str2,find("c++"),3,"javascript");
输出结果:
如果改成str2.replace(str2,find("c++"),20,"javascript") 这时只输出javascript。
栗子3:
//替换等于1的所有数
vector<int> v{ 1,2,3,4,5,6,1 };
std::replace(v.begin(), v.end(), 1, 66);
for (auto i : v) {
cout << i << " ";
}
std::cout << std::endl;
//替换小于4的所有数
std::replace_if(v.begin(), v.end(),std::bind(std::less<int>(), std::placeholders::_1, 4), 99);
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
输出:
更多推荐
已为社区贡献2条内容
所有评论(0)