2012-06-27 58 views
0

由兩個std :: string :: reverse_iterators表示的子字符串,我如何將它們複製出來並將其分配給正常序列的新字符串,而不是反向?使用字符串檢索子字符串:: reverse_iterator

一個塞納里奧可能是:「世界,你好約翰」的字符串,從尾巴和滿足探頭「 - 」使用:

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

而且rIter所指向「 - 」。 我想要得到的「約翰」出來的,但如果我這樣做:

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

我會得到「nhoj」。

謝謝你們!

回答

3

您可能需要使用string::rfind來解決該問題。

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

否則就可以通過base()成員函數獲得reverse_iterator的底層iterator並返回一個關閉的情況的一個迭代器。

+0

感謝您的關注pmr,但我不能這樣做,如果分隔符是一個字符集。讓我們專注於使用string :: reverse_iterator。 – Lyn

+1

@Lyn,是的,你可以使用['std :: string :: find_last_of()'](http://en.cppreference.com/w/cpp/string/basic_string/find_last_of)。 – hmjd

+0

@hmjd,謝謝!與find/rfind混淆。我現在試試吧, – Lyn

2

按照要求...

繼@ PMR的答案提供了一個更簡單的方法,對鉛std::string搜索的多個字符中的一個,你可以使用std::string::find_last_of()

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

感謝@hmjd,您的幫助解決了我真正的問題。冷靜下來後,我發現自己仍然對reverse_iterator方式感到好奇。我已經提出了你的意見,如果沒有答案,我會接受你。希望你會明白......再次感謝! – Lyn