2012-06-27 2 views
0

두 개의 std :: string :: reverse_iterators로 표시된 하위 문자열은 어떻게 복사하여 역순으로 일반 문자열로 새 문자열에 할당 할 수 있습니까?문자열을 사용하여 부분 문자열 검색 :: reverse_iterator

한 senario가 될 수있다 : - :

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

을 그리고 rIter은에서 가리키는 '-'에 "Hello World-존"의 문자열, 꼬리 대회에서 프로브 ''를 사용. 나는 밖으로 "존"싶어하지만, 내가 할 경우 :

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,하지만 delimter가 char 세트 인 경우에는 할 수 없습니다. 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

...

std::string에서 여러 문자 중 하나를 검색하는 간단한 방법을 제공 @의 PMR의 대답의 리드에 따라 당신은 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

관련 문제