3

我还是 STL 的新手,想chk.

我尝试了以下方法:

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

但它抛出了这个错误:

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])

在这种情况下我该如何replace上班?

注意:我看到了一个类似的问题,但在这种情况下,OP 使用“blah”和“b”作为要替换的参数,但这里我的两个参数都是字符串。

4

3 回答 3

7

由于定义std::replace

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

参考http://en.cppreference.com/w/cpp/algorithm/replace

你必须通过 achar因为 astd::stringstd::basic_string<char>并且T是 a char

例如:

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

要解决您的问题,请阅读:如何将一个字符串的所有实例替换为另一个字符串?

于 2013-05-26T18:33:18.093 回答
3

C++ 标准库不包含您在此处寻找的替换函数。替换是一种通用算法,它用某个其他元素值替换任何序列(是chars、ints 或s 中的序列之一)中所有出现的一个元素。YourType例如,它不能改变字符串的长度。(怎么可能?改变字符串的大小需要调用字符串的成员函数,并且replace没有对字符串的引用)

如果您需要这种替换,您可能需要考虑Boost String Algorithms库。

于 2013-05-26T18:42:02.823 回答
2

错误消息很清楚:您需要使用 char 作为值,而不是 c 字符串。这意味着,不可能将 2 个字符替换为 1 个字符。


如果你想用另一个字符串替换一个字符串的子字符串,你可以使用这个解决方案

void replaceAll(std::string& str, const std::string& from, const std::string& to) {
    if(from.empty())
        return;
    std::string::size_type start_pos = 0;
    while((start_pos = str.find(from, start_pos)) != std::string::npos) {
        str.replace(start_pos, from.length(), to);
        start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
    }
}
于 2013-05-26T18:32:15.043 回答