在此代码中,我收到以下运行时错误:
抛出'std :: out_of_range'实例后调用终止方法
what():basic_string :: replace bash:第1行:9471已中止
(核心已转储)
就我而言,这意味着我已经在for循环中操纵了向量,而我还没有这样做。
#include <iostream>
#include <string>
#include <vector>
std::string replace(std::string text,
std::string find,
std::string replace)
{
return(text.replace(text.find(find), find.length(), replace));
}
int main()
{
std::vector<std::string> mylist={"col1","cell2","col3","cell4","col5"};
for(const std::string item: mylist)
{
std::cout<<replace(item,"cell","item")<<std::endl;
}
return 0;
}
您正在尝试在字符串中替换cell
为。没有这样的子字符串,因此将返回(通常是,但是特定于实现)。之后,将传递到导致异常的位置。item
col1
text.find()
string::npos
((size_t) -1)
string::npos
replace()
像这样重写您的函数:
std::string replace(std::string text,
std::string find,
std::string replace)
{
size_t idx = text.find(find);
if(idx == std::string::npos)
return(text);
return(text.replace(idx, find.length(), replace));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句