How to replace all occurrences of a character in a std::string

This can be done using the standard library or Boost. The advantage of using Boost is that you get Boost ranges, which mean that you don’t need to specify the beginning and end of the string.

With both libraries, the replacement can be made on the original string or a copy.

  1. Use std::replace()
  2. Use std::replace_copy
  3. Use boost_replace_all
  4. Use boost_replace_all_copy

Method 1: Use std::replace()

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string str("Quick+brown+fox");
    std::replace(str.begin(), str.end(), '+', ' ');
    std::cout << str << "\n";
}

Method 2: Use std::replace_copy

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string str1("Quick+brown+fox");
    std::string str2(str1.size(), '\0');
    std::replace_copy(str1.begin(), str1.end(), str2.begin(), '+', ' ');
    std::cout << str2 << "\n";
}

Method 3: Use boost_replace_all

#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>

int main()
{
    std::string str("Quick+brown+fox");
    boost::replace_all(str, "+", " ");
    std::cout << str << "\n";
}

Method 4: Use boost_replace_all_copy

#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>

int main()
{
    std::string str1("Quick+brown+fox");
    std::string str2 =  boost::replace_all_copy(str1, "+", " ");
    std::cout << str2 << "\n";
}

References:
Function template replace_all
Function replace_all_copy

Related