不是很优雅,但它会完成工作。现在您可以用其他字符串替换字符串 - 或者只使用一个字符长的字符串(类似于您在示例中所做的)。
#include <iostream>
#include <cstdlib>
#include <string>
std::string string_replace_all( std::string & src, std::string const& target, std::string const& repl){
if (target.length() == 0) {
// searching for a match to the empty string will result in
// an infinite loop
// it might make sense to throw an exception for this case
return src;
}
if (src.length() == 0) {
return src; // nothing to match against
}
size_t idx = 0;
for (;;) {
idx = src.find( target, idx);
if (idx == std::string::npos) break;
src.replace( idx, target.length(), repl);
idx += repl.length();
}
return src;
}
int main(){
std::string test{"loool lo l l l l oooo l loo o"};
std::cout << string_replace_all(test,"o","z") << std::endl;
return EXIT_SUCCESS;
}
输出: lzzzl lz llll zzzz l lzz z
如果您要使用自己的实现,请小心并检查您的边缘情况。确保程序不会在任何空字符串上崩溃。