使用string :: reverse_iterator检索子字符串

时间:2012-06-27 08:00:36

标签: c++ string

由两个std :: string :: reverse_iterators表示的子字符串,如何将它们复制出来并分配给具有正常序列的新字符串,而不是反向?

一个参议员可能是:一串“Hello world-John”,从尾巴探测并使用以下方式与' - '会面:

      std::string::reverse_iterator rIter
         = std::find(str.rbegin(), str.rend(), isDelimiterFunc);

并且rIter指向' - '。 我想让“约翰”出局,但如果我这样做:

  std::string out(str.rbegin(), rIter - 1);

我会得到“nhoj”。

谢谢你们!

2 个答案:

答案 0 :(得分:3)

您可能希望使用string::rfind来解决该问题。

std::string f;
auto pos = f.rfind("-");
std::string f2= f.substr(pos);

否则,您可以通过iterator成员函数获取reverse_iterator的基础base(),并返回一个逐个迭代器。

答案 1 :(得分:2)

按照要求......

在@ pmr的回答提供更简单的方法之后,要搜索std::string中的多个字符之一,您可以使用std::string::find_last_of()

std::string str("Hello world-John");
const size_t idx = str.find_last_of("-x!@~");
if (std::string::npos != idx)
{
    std::cout << str.substr(idx+1) << "\n";
}