c++ string replace_C++[10].C++的string类的成员函数09.replace

字符串替换函数 replace 是C++为string类添加的用于快速替换的函数。查看重载的个数

82531c1e35f6552249fd4e92d31bb781.png

从图中可以看出,replace重载了10次

先看源码

// 01. string& replace(unsigned int start_id, unsigned int len, const string& obj); 调用了02_Myt& replace(size_type _P0, size_type _N0, const _Myt& _X){  return (replace(_P0, _N0, _X, 0, npos)); }// 02. string& replace(unsigned int start_id, unsigned int len, \    const string& obj, unsigned int start_id2, unsigned int len2);_Myt& replace(size_type _P0, size_type _N0, const _Myt& _X, size_type _P, size_type _M){  if (_Len < _P0 || _X.size() < _P)    _Xran();    if (_Len - _P0 < _N0)    _N0 = _Len - _P0;    size_type _N = _X.size() - _P;    if (_N < _M)    _M = _N;  if (npos - _M <= _Len - _N0)    _Xlen();    _Split();  size_type _Nm = _Len - _N0 - _P0;    if (_M < _N0)    _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);    if ((0 < _M || 0 < _N0) && _Grow(_N = _Len + _M - _N0))  {    if (_N0 < _M)      _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);        _Tr::copy(_Ptr + _P0, &_X.c_str()[_P], _M);    _Eos(_N);   }    return (*this); }// 03. string& replace(unsigned int start_id, unsigned int len, const char* str, unsigned int len2);_Myt& replace(size_type _P0, size_type _N0, const _E *_S, size_type _M){  if (_Len < _P0)    _Xran();    if (_Len - _P0 < _N0)    _N0 = _Len - _P0;    if (npos - _M <= _Len - _N0)    _Xlen();    _Split();  size_type _Nm = _Len - _N0 - _P0;    if (_M < _N0)    _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);    size_type _N;    if ((0 < _M || 0 < _N0) && _Grow(_N = _Len + _M - _N0))  {    if (_N0 < _M)      _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);    _Tr::copy(_Ptr + _P0, _S, _M);    _Eos(_N);   }    return (*this); }// 04. string& replace(unsigned int start_id, unsigned int len, const char* str); 调用了_Myt& replace(size_type _P0, size_type _N0, const _E *_S){  return (replace(_P0, _N0, _S, _Tr::length(_S))); }// 05. string& replace(unsigned int start_id, unsigned int len, unsigned int len2, char ch); 调用了_Myt& replace(size_type _P0, size_type _N0, size_type _M, _E _C){  if (_Len < _P0)    _Xran();    if (_Len - _P0 < _N0)    _N0 = _Len - _P0;    if (npos - _M <= _Len - _N0)    _Xlen();    _Split();  size_type _Nm = _Len - _N0 - _P0;    if (_M < _N0)    _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);    size_type _N;  if ((0 < _M || 0 < _N0) && _Grow(_N = _Len + _M - _N0))  {    if (_N0 < _M)      _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0 + _N0, _Nm);        _Tr::assign(_Ptr + _P0, _M, _C);    _Eos(_N);   }    return (*this); }// 06. string& replace(iterator first, iterator last, const string& obj);_Myt& replace(iterator _F, iterator _L, const _Myt& _X){  return (replace(_Pdif(_F, begin()), _Pdif(_L, _F), _X)); }  // 07. string& replace(iterator first, iterator last, const char* str, unsigned int len);  _Myt& replace(iterator _F, iterator _L, const _E *_S, size_type _M){  return (replace(_Pdif(_F, begin()), _Pdif(_L, _F), _S, _M)); }  // 08. string& replace(iterator first, iterator last, const char* str);  _Myt& replace(iterator _F, iterator _L, const _E *_S){  return (replace(_Pdif(_F, begin()), _Pdif(_L, _F), _S)); }    // 09. string& replace(iterator first, iterator last, unsigned int len, char ch);  _Myt& replace(iterator _F, iterator _L,  size_type _M, _E _C){  return (replace(_Pdif(_F, begin()), _Pdif(_L, _F), _M, _C)); }// 10. string& replace(iterator first, iterator last, iterator first2, iterator last2); 迭代器_Myt& replace(iterator _F1, iterator _L1, _It _F2, _It _L2){  size_type _P0 = _Pdif(_F1, begin());  size_type _M = 0;  _Distance(_F2, _L2, _M);  replace(_P0, _Pdif(_L1, _F1), _M, _E(0));    for (_F1 = begin() + _P0; 0 < _M; ++_F1, ++_F2, --_M)    *_F1 = *_F2;    return (*this); }

测试代码

string str1 = "Hello_World_Welcome";  string str2 = "#####";string str3 = "*****";cout << "str1 -> " << str1 << "\t str2 -> " << str2 << "\t str3 -> " << str3 << endl;// 01. string& replace(unsigned int start_id, unsigned int len, const string& obj); 调用了02cout << "string& replace(unsigned int start_id, unsigned int len, const string& obj);" << endl;cout << "str1.replace(0, str2.size(), str2) -> " << str1.replace(0, str2.size(), str2) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(5, str3.size(), str3) -> " << str1.replace(5, str3.size(), str3) << endl;cout << "########################################" << endl;// 02. string& replace(unsigned int start_id, unsigned int len, \  const string& obj, unsigned int start_id2, unsigned int len2);cout << "string& replace(unsigned int start_id, unsigned int len, const string& obj, " <<   "unsigned int start_id2, unsigned int len2);" << endl;cout << "str1.replace(7, str2.size(), str2, 0, str2.size()) -> "     << str1.replace(7, str2.size(), str2, 0, str2.size()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(11, str3.size(), str3, 0, str3.size()) -> "     << str1.replace(1, str3.size(), str3, 0, str3.size()) << endl;cout << "########################################" << endl;// 03. string& replace(unsigned int start_id, unsigned int len, const char* str, unsigned int len2);cout << "string& replace(unsigned int start_id, unsigned int len, " <<   "const char* str, unsigned int len2); " << endl;cout << "str1.replace(10, str2.size(), str2.c_str(), str2.size()) -> "     << str1.replace(10, str2.size(), str2.c_str(), str2.size()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(13, str3.size(), str3.c_str(), str3.size()) -> "     << str1.replace(13, str3.size(), str3.c_str(), str3.size()) << endl;cout << "########################################" << endl;// 04. string& replace(unsigned int start_id, unsigned int len, const char* str); 调用了cout << "string& replace(unsigned int start_id, unsigned int len, const char* str); " << endl;cout << "str1.replace(6, str2.size(), str2.c_str()) -> "     << str1.replace(6, str2.size(), str2.c_str()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(4, str3.size(), str3.c_str()) -> "     << str1.replace(4, str3.size(), str3.c_str()) << endl;cout << "########################################" << endl;// 05. string& replace(unsigned int start_id, unsigned int len, unsigned int len2, char ch); 调用了cout << "string& replace(unsigned int start_id, unsigned int len, unsigned int len2, char ch); " << endl;cout << "str1.replace(3, str2.size(), str2.size(), str2[5]) -> "     << str1.replace(3, str2.size(), str2.size(), str2[5]) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(6, str3.size(), str3.size(), str3[5]) -> "     << str1.replace(6, str3.size(), str3.size(), str3[5]) << endl;cout << "########################################" << endl;// 06. string& replace(iterator first, iterator last, const string& obj);cout << "string& replace(iterator first, iterator last, const string& obj); " << endl;cout << "str1.replace(str1.begin()+5, str1.begin()+5+str2.size(), str2) -> "     << str1.replace(str1.begin()+5, str1.begin()+5+str2.size(), str2) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(str1.begin()+3, str1.begin()+3+str3.size(), str3) -> "     << str1.replace(str1.begin()+3, str1.begin()+3+str3.size(), str3) << endl;cout << "########################################" << endl;// 07. string& replace(iterator first, iterator last, const char* str, unsigned int len);  cout << "string& replace(iterator first, iterator last, const char* ch, unsigned int len); " << endl;cout << "str1.replace(str1.begin()+2, str1.begin()+2+str2.size(), str2.c_str(), str2.size()) -> "     << str1.replace(str1.begin()+2, str1.begin()+2+str2.size(), str2.c_str(), str2.size()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(str1.begin()+1, str1.begin()+1+str3.size(), str3.c_str(), str3.size()) -> "     << str1.replace(str1.begin()+1, str1.begin()+1+str3.size(), str3.c_str(), str3.size()) << endl;cout << "########################################" << endl;// 08. string& replace(iterator first, iterator last, const char* str);  cout << "string& replace(iterator first, iterator last, const char* ch); " << endl;cout << "str1.replace(str1.begin()+4, str1.begin()+4+str2.size(), str2.c_str()) -> "     << str1.replace(str1.begin()+4, str1.begin()+4+str2.size(), str2.c_str()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(str1.begin()+5, str1.begin()+5+str3.size(), str3.c_str()) -> "     << str1.replace(str1.begin()+5, str1.begin()+5+str3.size(), str3.c_str()) << endl;cout << "########################################" << endl;// 09. string& replace(iterator first, iterator last, unsigned int len, char ch);  cout << "string& replace(iterator first, iterator last, unsigned int len, char ch); " << endl;cout << "str1.replace(str1.begin()+7, str1.begin()+7+str2.size(), str2.size(), str2[0]) -> "     << str1.replace(str1.begin()+7, str1.begin()+7+str2.size(), str2.size(), str2[0]) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(str1.begin()+9, str1.begin()+9+str3.size(), str3.size(), str3[0]) -> "     << str1.replace(str1.begin()+9, str1.begin()+9+str3.size(), str3.size(), str3[0]) << endl;cout << "########################################" << endl;// 10. string& replace(iterator first, iterator last, iterator first2, iterator last2); 迭代器cout << "string& replace(iterator first, iterator last, iterator first2, iterator last2); " << endl;cout << "str1.replace(str1.begin()+6, str1.begin()+6+str2.size(), str2.begin(), str2.end()) -> "     << str1.replace(str1.begin()+6, str1.begin()+6+str2.size(), str2.begin(), str2.end()) << endl;str1 = "Hello_World_Welcome";cout << "str1.replace(str1.begin()+8, str1.begin()+8+str3.size(), str3.begin(), str3.end()) -> "     << str1.replace(str1.begin()+8, str1.begin()+8+str3.size(), str3.begin(), str3.end()) << endl;cout << "########################################" << endl;

显示运行结果

41a6317317e9bfb16a332584437379d0.png

另外还有 max_size, resize, swap等函数

string str1 = "Hello_World_welcome";cout << "str1.max_size() -> " << str1.max_size() << endl;cout << "############################" << endl;cout << "str1 -> " << str1 << endl;str1.resize(10);cout << "str1.resize(10) -> " << str1 << endl;cout << "str1 -> " << str1 << endl;cout << "############################" << endl;str1 = "Hello_World_welcome";str1.swap(string());cout << "str1.swap(string()) -> " << str1 << endl;str1 = "Hello_World_welcome";str1.swap(string("###########"));cout << "str1.swap(string(\"###########\")) -> " << str1 << endl;  cout << "##############################" << endl;

显示运行结果

496b3594cb7fd9d8e9a8dcd274cb4663.png

红色表示的部分,不是机器问题没有显示出来而是处理完之后,str1本身已经没有内容,所以显示为空

到此为止。C++ string类的成员函数以及全部介绍完了。明天会做一个总结

并做一个有趣的项目,将所学的知识合理地表示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值