1

2 つの 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の基になるものを取得でき、off-by-one イテレーターを返します。reverse_iteratorbase()

于 2012-06-27T08:03:24.830 に答える
2

リクエスト通り...

より簡単なアプローチを提供する@pmrの回答のリードに従って、std::string使用できる複数の文字の1つを検索するには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 に答える