2012-05-12 4 views
14

예를 들어, 내가 std::string 일부 파일에 UNIX 스타일의 경로가 포함이 있다고 가정 blah '폴더에 저장됩니다. 그래서 거기에 "/first/second/blah" 만 포함되도록이 문자열을 잘라내는 효율적인 ('효율적인'이라는 말은 '복사본이 없으면') 방법입니까?효율적인 방법 N

미리 감사드립니다. N 알고있는 경우

답변

30

, N 알 수없는 경우

path.erase(N, std::string::npos); 

을 사용할 수 있습니다 당신이 그것을 찾으려면, 당신은 검색 기능을 사용할 수 있습니다. 이 경우는 '마지막 슬래시를 발견 할 것이다, 그래서 당신은 rfind 또는 find_last_of가 사용할 수 있습니다

path.erase(path.rfind('/'), std::string::npos); 
path.erase(path.find_last_of('/'), std::string::npos); 

반복자에 따라이 심지어 변형있다 : 당신이 경우

path.erase (path.begin() + path.rfind('/'), path.end()); 

, 말했다 생활을위한 경로를 조작하려는 경우이 작업을 위해 설계된 라이브러리 (예 : Boost Filesystem)를 사용하는 것이 더 좋습니다.

+0

정확히 내가 원했던 것! 나는 이것을하는 _beautiful_ 방법이 있어야한다는 것을 알았습니다 :) 감사합니다. – tonytony

+0

또는 많은 아름다운 방법 :) – chris

+0

나는 std :: npos 대신에 대답 : std :: string :: npos를 편집했다. npos는 std :: string이 아닌 std의 멤버입니다 –