Непонятно, с какой частью проблемы вы застряли, поэтому вот вам стартер.
Чтобы получить части строк между «заданной строкой» и конечным символом «/» (гдеприсутствует):
std::string get_pertinent_part(const std::string& s)
{
std::string::size_type first = 0;
if (s.find(given_string) == 0)
{
first = given_string.length() + 1;
}
std::string::size_type count = std::string::npos;
std::string::size_type pos = s.find_last_of("/");
if (pos != std::string::npos && pos > first)
{
count = pos + 1 - first;
}
return s.substr(first, count);
}
Чтобы вставить эти детали в новый набор (output
), чтобы гарантировать уникальность, вы можете использовать следующее:
std::transform(your_set.begin(),
your_set.end(),
std::inserter(output, output.end()),
get_pertinent_part);
Возможно, вы захотите передать given_string
в get_pertinent_part()
, в этом случае вам необходимо преобразовать его в функтор:
struct get_pertinent_part
{
const std::string given_string;
get_pertinent_part(const std::string& s)
:given_string(s)
{
}
std::string operator()(const std::string& s)
{
std::string::size_type first = 0;
//
// ...same code as before...
//
return s.substr(first, count);
}
};
Затем вы можете назвать его следующим образом:
std::transform(your_set.begin(),
your_set.end(),
std::inserter(output, output.end()),
get_pertinent_part("bin/obj/Debug"));
Для вывода новогоset
:
std::copy(output.begin(),
output.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
Сортировка результатов оставлена в качестве упражнения.