我正在编写一个函数,它接受三个参数:
target
: 目标字符串oldVal
: 旧子串newVal
: 新子字符串(替换 oldVal)
该函数的任务是查找字符串中所有出现的oldVal
,target
并将它们替换为newVal
。
这是我目前拥有的功能:
std::string replace_old_with_new(std::string target, std::string oldVal, std::string newVal) {
std::cout << "target : " << target << ", oldVal: " << oldVal << ", newVal: " << newVal << "\n";
std::string::iterator begin = target.begin();
std::string::iterator oldValBegin = oldVal.begin();
while (begin != target.end()) {
if (*begin == *oldValBegin) {
target = target.replace(begin, begin + oldVal.size(), oldVal);
begin = target.begin();
} else {
++begin;
}
}
return target;
}
对上述函数的以下调用:
replace_old_with_new("Hello! hi hi!", "hi", "bye");
应该返回字符串 -
"Hello! bye bye!"
但是,当我运行代码时,什么也没有发生。好像我陷入了无限循环。光标在终端上一直闪烁。我的功能有问题。我认为可能令人不安的是街区replace
里的电话。这是在函数调用if
中使用迭代器范围的正确方法吗?replace
我可以用erase
and做到这一点insert
。但我想在replace
这里使用。