string::find_last_of
имеет optional argument, который позволяет определить, как далеко в строку, которую вы ищете.
Таким образом, вы можете определить
size_t second_to_last = t.find_last_of("/", t.find_last_of("/")-1);
std::string file_with_parent = t.substr(second_to_last+1);
Второй аргумент говорит ему искать только перед тем последний /
.
ВНИМАНИЕ: Это может отличаться от того, что вы хотите, если у вас есть такие вещи, как "C:/bli/bla//blubb.txt"
. В общем, пути могут быть сложными и запутанными, и попытка покорить их с помощью строковых манипуляций будет работать только для очень хорошо выполненного ввода, который обычно не может быть принят.
Поэтому я рекомендовал использовать надлежащий инструмент для этой работы. * Но поскольку вопрос утверждал, что find_last_of
не выполнил бы эту работу, я чувствовал себя вынужденным напомнить людям, что стандартные объекты не так бессильны, как многие, кажется, верят они должны быть.
* Я подозреваю, что путь ускорения lib является одним, но я никогда не работал с ним.
Что вы пробовали? Почему вы не взяли [Tour] (http://stackoverflow.com/tour)? –
Спасибо за ваши ответы и за мой @ joshj777. Вот решение, которое я закончил, используя: std :: string t = pathObject.parent_path(). Filename(). String(); \t \t \t t.добавление ("/"); \t \t \t t.append (pathObject.filename(). String()); –
Вы должны принять один из ответов ниже. (Это может быть ваше собственное, но это не обязательно.) –