【发布时间】:2011-11-02 09:59:00
【问题描述】:
例如我们在我们的集合中:
bin/obj/Debug/CloudServerPrototype/ra.write.1.tlog
bin/obj/Debug/CloudServerPrototype/rc.write.1.tlog
bin/obj/Debug/vc100.idb
bin/obj/Debug/vc100.pdb
所以这就是我根据grate answer 尝试的:
#include <iostream>
#include <algorithm>
#include <set>
#include <string>
#include <iterator>
using namespace std;
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;
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);
}
};
void directory_listning_without_directories_demo()
{
set<string> output;
set<string> demo_set;
demo_set.insert("file1");
demo_set.insert("file2");
demo_set.insert("folder/file1");
demo_set.insert("folder/file2");
demo_set.insert("folder/folder/file1");
demo_set.insert("folder/folder/file2");
demo_set.insert("bin/obj/Debug/CloudServerPrototype/ra.write.1.tlog");
demo_set.insert("bin/obj/Debug/CloudServerPrototype/rc.write.1.tlog");
demo_set.insert("bin/obj/Debug/vc100.idb");
demo_set.insert("bin/obj/Debug/vc100.pdb");
std::transform(demo_set.begin(),
demo_set.end(),
std::inserter(output, output.end()),
get_pertinent_part("bin/obj/Debug/"));
std::copy(output.begin(),
output.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
int main()
{
directory_listning_without_directories_demo();
cin.get();
return 0;
}
这个输出:
CloudServerPrototype/
file1
file2
folder/
folder/folder/
vc100.idb
vc100.pdb
我们得到了bin/obj/Debug/string。我们要cout:
vc100.idb
vc100.pdb
CloudServerPrototype/
这样的事情怎么办?
【问题讨论】:
-
看起来
string::find()和string::substr()的组合可以解决问题。 -
@Kerrek 还有很多其他事情。
-
在
set迭代、string操作或cout的哪一部分尝试此操作时,您遇到了困难? -
@Kerrek SB:
std::string::find_last_of()在这里也很有用。 -
@Johnsyweb:鉴于 OP 已经发布了关于一组文件名的十几个问题,也许我们可以开始拼凑这个难题。就像 Torchwood Miracle Day,只是 Lauren Ambrose 是一个 STL 容器。