Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::replace的困难_C++_String_Stl_Replace - Fatal编程技术网

C++ std::replace的困难

C++ std::replace的困难,c++,string,stl,replace,C++,String,Stl,Replace,我还是STL新手,希望用k替换字符串中出现的所有ch 我尝试了以下方法: std::replace (str.begin(), str.end(), "ch", "k"); 但它抛出了这个错误: 调用“replace”(\uu gnu\u cxx::\uu normal\u迭代器、, __gnu_cxx::uu normal_迭代器,常量字符[2],常量字符[1]) 在这种情况下,如何使replace工作 注意:我看到了一个类似的问题,但在这种情况下,OP使用“blah”和“b”作为要替换的

我还是STL新手,希望用
k
替换字符串中出现的所有
ch

我尝试了以下方法:

std::replace (str.begin(), str.end(), "ch", "k");
但它抛出了这个错误:

调用“replace”(\uu gnu\u cxx::\uu normal\u迭代器、,
__gnu_cxx::uu normal_迭代器,常量字符[2],常量字符[1])
在这种情况下,如何使
replace
工作


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

错误消息非常清楚:您需要使用char作为值,而不是c字符串。也就是说,不可能用一个字符替换两个字符


如果要用另一个字符串替换字符串的子字符串,可以使用:

既然定义是


为了解决你的问题,阅读:

< P> C++标准库不包含像你在这里寻找的替换函数。Replace是一种通用算法,它用其他元素值替换任何序列中一个元素的所有匹配项(即
char
s、
int
s或
YourType
s中的一个序列)。例如,它不能更改字符串的长度。(怎么可能?更改字符串的大小需要调用字符串的成员函数,
replace
没有对字符串的引用)


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

最后两个参数必须是类型<代码> char 。在这种情况下……考虑Boost的<代码> RePraseAuth/Engult>函数。如果内存可用,它可以用其他字符串替换子字符串。@OliCharlesworth从技术上讲,最后两个参数的类型必须与
char
相似,并且可以赋值。我不能使用不同大小的字符串,或者根本不能使用字符串?我是否可以用“k%”替换所有“ch”,然后稍后删除代码段的所有“%”?+1。当然,从技术上讲,应该有人使用std::string::size_type而不是size_t,但这是一个吹毛求疵的问题。@BillyONeal或auto在
中,而
@BJ:No,如果针头包含替换物,auto会做错误的事情。“错误信息非常清楚”。也许对某些人来说。对其他人来说,这有点屈尊。顺便说一句,我不能用boost库来做TopCoder之类的事情,对吧?@ofey:我不知道TopCoder是什么。我是说实时在线算法编码比赛。我必须使用他们支持的任何库,对吗?我的意思是简单地添加一个标题,如将不起作用?或者会吗?@ofey:哦,那可能不会。当然,除非他们已经安装了boost安装。
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'
    }
}
template< class It, class T >
void replace( It first, It last, const T& old_value, const T& new_value );
std::replace (str.begin(), str.end(), 'c',  'k');