2012-05-12 50 views
14

例如,假设我有一个包含一些文件UNIX风格的路径std::string有效的方式来截断字符串,长度为N

string path("/first/second/blah/myfile"); 

现在假设我要扔掉文件的相关信息,并获得路径“来自这个字符串的'blah'文件夹。那么有没有一种高效的方式(说'有效的'我的意思是'没有任何副本')截断这个字符串的方式,以便它只包含"/first/second/blah"

在此先感谢。

回答

30

如果N是已知的,可以使用

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

如果N不知道,你想找到它,你可以使用任何的搜索功能。在这种情况下,你会想找到最后一个斜线,这样您就可以使用rfindfind_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

正是我想要的!我知道必须有这样做的好方法:)谢谢。 – tonytony

+0

或许多美丽的方式:) – chris

+0

我编辑了答案,std :: string :: npos代替std :: npos。 npos是std :: string的成员不是std –