我想删除字符串中两个相同字符之间的所有字符。我的函数在其参数中接受一个字符串(按引用传递)和一个字符。
假设我使用了像这样的std :: string变量作为第一个参数:“hah haaah hah hello!”并使用字符'h'作为第二个参数,应该会发生以下情况:“hah haaah hah hello!” ===>“hh hh hh hello”。正如您所看到的,已经删除了两个'h'字符之间的每个字符。我该如何实现这样的效果?
我尝试使用迭代器,并得到了以下结果:
首先,我搜索第一个出现的
但由于某些原因,这段代码无法正常工作。有时它会删除空格,甚至不会触及我想要删除的字符。
感谢您的帮助。
假设我使用了像这样的std :: string变量作为第一个参数:“hah haaah hah hello!”并使用字符'h'作为第二个参数,应该会发生以下情况:“hah haaah hah hello!” ===>“hh hh hh hello”。正如您所看到的,已经删除了两个'h'字符之间的每个字符。我该如何实现这样的效果?
我尝试使用迭代器,并得到了以下结果:
void delete_chars_between(std::string& line, char del)
{
std::string::iterator itr_from = std::find(line.begin(), line.end(), del);
std::string::iterator itr_to = std::find(itr_from + 1, line.end(), del);
while (true) {
if(itr_to != line.end())
line.erase(itr_from + 1, itr_to);
itr_from = std::find(itr_to, line.end(), del);
if (itr_from == line.end())
break;
itr_to = std::find(itr_from + 1, line.end(), del);
if (itr_to == line.end())
break;
}
}
首先,我搜索第一个出现的
del
,并将其位置的迭代器存储在itr_from
中。之后,我搜索第二个del
的出现。最后,如果itr_to
有效,我会运行一个while循环,该循环从一定范围内删除字符。只要我的迭代器不等于line.end()
,我就一遍又一遍地重复这个过程。但由于某些原因,这段代码无法正常工作。有时它会删除空格,甚至不会触及我想要删除的字符。
感谢您的帮助。
std::regex_replace
。 - NathanOlivererase
使无效,尝试在erase
操作后重置两者。 - Matt