出发点
写力扣算法题发现stl库里string字符串的replace函数仅能应用在已知位置之间的一段子串上 。就想自己实现一遍并尝试优化时间、空间效率。
初步功能实现
void stringFunction::string_replace(std::string& strBig, const std::string& strsrc, const std::string& strdst)
{
std::string::size_type pos = 0;
std::string::size_type srclen = strsrc.size();
std::string::size_type dstlen = strdst.size();
while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}
优化思路
1. 使用std::string::replace函数代替手动替换:
std::string::replace函数可以直接替换一个指定位置和长度的子串为另一个子串,比手动替换更简单高效。
2. 使用std::string::reserve函数预先分配内存:
如果预先知道最终字符串的长度,可以使用std::string::reserve函数预先分配内存,减少字符串扩容和内存分配的次数,提高程序效率。
git项目地址