C ++:如何用另一个字符替换字符串中字符的所有实例?

时间:2011-03-17 16:25:40

标签: c++

我在互联网上找到了这种方法:

//the call to the method: 
cout << convert_binary_to_FANN_array("1001");

//the method in question: 
string convert_binary_to_FANN_array(string binary_string)
{
string result = binary_string;

replace(result.begin(), result.end(), "a", "b ");
replace(result.begin(), result.end(), "d", "c ");
return result;
}

但是这给了

main.cpp:30: 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 [3])’

3 个答案:

答案 0 :(得分:5)

你需要字符而不是字符串作为replace的第三和第四个参数。当然,如果你真的想用'a'替换"b ",那就不行了。

所以,例如,

string convert_binary_to_FANN_array(string binary_string)
{
    string result = binary_string;

    replace(result.begin(), result.end(), 'a', 'b');
    replace(result.begin(), result.end(), 'd', 'c');
    return result;
}

会将a转换为b而将d转换为c s(不过为什么你要这样做只包含0和1的字符串,我无法想象)。但是,它不会插入任何额外的空格。

如果确实需要额外的空格,请参阅(1)Timo Geusch提供的参考资料和(2):Replace part of a string with another string

答案 1 :(得分:1)

查看std::string替换函数系列的文档:

http://www.cplusplus.com/reference/string/string/replace/

你会发现没有一个允许你指定一个字符串和一个替换字符串,它们主要用于偏移/迭代器和替换。

升级库有一大堆替代算法可能更适合:

http://www.boost.org/doc/libs/1_46_1/doc/html/string_algo/usage.html#id2728305

答案 2 :(得分:0)

如果你想本地化替换的另一种方法是使用仿函数......

示例:

#include <string>
#include <algorithm>

struct replaceChar
{
   void operator()(char& c) { if(c == 'a') c = 'b'; }
};

std::string str = "Ababba";

std::for_each(str.begin(), str.end(), replaceChar() );