1

由两个 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”。

多谢你们!

4

2 回答 2

3

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

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

否则,您可以通过成员函数获取iteratora 的基础,它返回一个非一的迭代器。reverse_iteratorbase()

于 2012-06-27T08:03:24.830 回答
2

按照要求...

std::string按照@pmr's answer的引导,它提供了一种更简单的方法,可以使用以下方法搜索多个字符之一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";
}
于 2012-06-27T08:25:30.220 回答