Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difficulty with std::replace

I am still new to STL and wanted to replace all occurrences of ch in a string with k.

I tried the following:

std::replace (str.begin(), str.end(), "ch", "k");

But it threw this error:

no matching function for call to ‘replace(__gnu_cxx::__normal_iterator<char*,
  std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
  __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>,
  std::allocator<char> > >, const char [2], const char [1])

How do I get replace to work in this case?

Note: I saw a similar question but in that case the OP was using "blah" and 'b' as arguments to be replaced but here both of my arguments are strings.

like image 518
ofey Avatar asked Jul 05 '26 13:07

ofey


1 Answers

Since the definition of std::replace is

template< class It, class T >
void replace( It first, It last, const T& old_value, const T& new_value );

Reference http://en.cppreference.com/w/cpp/algorithm/replace

You must pass a char because a std::string is std::basic_string<char> and T is a char.

For example:

std::replace (str.begin(), str.end(), 'c',  'k');

To solve your problem, read: How do I replace all instances of a string with another string?

like image 193
masoud Avatar answered Jul 07 '26 03:07

masoud



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!