[C++]string类的字符串替换replace()⽅法及扩展应⽤详述引⾔:
C++的string库提供了专门的函数⽅法来实现字符串的替换:place()
但是这个函数将源字符串中某个字符串只替换了⼀次,string类并没有实现对于源字符串中的某个字符串全部替换。
介绍:
在C++11标准中string::replace的原型有下⾯⼏种,但是常⽤的就前⾯3种,因此理解掌握前3种即可。
实践:
replace函数包含于头⽂件#include<string>中。
泛型算法replace把队列中与给定值相等的所有值替换为另⼀个值,整个队列都被扫描,即此算法的各个版本都在线性时间内执⾏----其复杂度为O(n)。即replace的执⾏要遍历由区间[frist,last)限定的整个队列,以把 old_value 替换成 new_value
前3种的代码操作如下,每份代码前将其函数原型和参数含义给出⽅便理解。
/* ⽤法⼀:
* string& replace (size_t pos, size_t len, const string& str);
* 源字符串中从位置 pos 开始长度为 len 的字符串被字符串 str 代替
*
* 功能:只替换⼀次
*/
int main()
{
string str_line("I love compile program with visual studio.");
cout << place(str_line.find('e'), 1, "#") << endl;
// 答案: I lov# compile program with visual studio.
return 0;
}
/* ⽤法⼆:
* string& replace (const_iterator i1, const_iterator i2, const string& str);
* ⽤ str 替换迭代器起始位置和结束位置之间的字符字符串replace函数
*
* 功能:替换⼀段字符串
*/
int main()
{
string str_line("I love compile program with visual studio.");
// ⽤ str 替换从begin位置开始的6个字符
cout << place(str_line.begin(), str_line.begin()+6, "**")<< endl;
// 答案:** compile program with visual studio.
return 0;
}
/* ⽤法三:
* string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
* 源串指定位置上的⼦串(pos开始len长度)被替换为 str 的指定⼦串(给定起始位置和长度)
*/
int main()
{
string str_line("I love compile program with visual studio.");
string substr = "12345";
cout << place(7, 7, substr, substr.find("2"), 3) << endl;
// 答案:I love 234 program with visual studio.
return 0;
}
但是,偶尔的时候需要将源字符串中的某个字符(或某段⼦串)全部替换,⽽string库中未提供相关的库函数,这就需要我们⾃⼰进⾏编写实现。这种情况在实际项⽬中经常遇见,学会⾃⼰编写这类函数有利于⾃⾝发展。代码如下:
/* 编写函数:
* string& replace_all (string& src, const string& old_value, const string& new_value);
* 参数:源字符串src 被替换的⼦串old_value 替换的⼦串new_value
*
* 功能:将源串src 中⼦串old_value 全部被替换为 new_value
*/
string& replace_all(string& src, const string& old_value, const string& new_value) {
// 每次重新定位起始位置,防⽌上轮替换后的字符串形成新的old_value
for (string::size_type pos(0); pos != string::npos; pos += new_value.length()) {
if ((pos = src.find(old_value, pos)) != string::npos) {
}
else break;
}
return src;
}
int main()
{
string str("I love compile program with visual studio.");
cout << replace_all(str, "o", "*0*") << endl;
/
/ 答案:I l*0*ve c*0*mpile pr*0*gram with visual studi*0*.
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论