gpt4 book ai didi

c++ - 使用模式正则表达式匹配的排序目录列表

转载 作者:行者123 更新时间:2023-11-30 03:06:24 25 4
gpt4 key购买 nike

我对使用以下代码片段使用 boost-filesystem 和 boost-regexp 从作为参数输入的目录获取绝对路径+文件名感到内疚。

其中 input_dir 是保存命令行参数的变量,表示要遍历的目录的名称,

  string dir_abs_name = "./" + input_dir;
string file_abs_name;
path current_dir(dir_abs_name);
boost::regex pattern("m.*"); // list all files starting with m

for (directory_iterator iter(current_dir),end; iter!=end; ++iter) {
string name = iter->path().leaf();
if (regex_match(name, pattern)) {
file_abs_name = dir_abs_name + name;
input_file = str_to_char(file_abs_name); // my own function that converts string to char* (needed that for another method later on in the code)

std::cout << "--> considering file " << input_file << "... \n";
}
}

现在我遇到了一个问题,即列表不是按字母顺序排列的。我得到随机匹配而不是它们按任何特定顺序排列。有没有办法强制执行该字母顺序?

谢谢。

编辑:值得一提的是,在程序中,我有时只处理目录中整个文件列表的一个子集。当我传递一个参数来选择时,我会这样做,假设目录中的 1000 个文件中只有 4 个文件。可以在检索列表后对它们进行排序……但检索仍然是随机的。

最佳答案

为什么不将结果缓存在一个 (std::vector) 中,对 vector 进行排序,然后迭代排序后的 vector 以执行处理?

例如:

string dir_abs_name = "./" + input_dir;
string file_abs_name;
path current_dir(dir_abs_name);
boost::regex pattern("m.*"); // list all files starting with m
std::vector<std::string> accumulator;
for (directory_iterator iter(current_dir),end; iter!=end; ++iter) {
string name = iter->path().leaf();
if (regex_match(name, pattern)) {
file_abs_name = dir_abs_name + name;
accumulator.push_back(file_abs_name);
}
}
std::sort(accumulator.begin(), accumulator.end());
std::vector<std::string>::iterator iter;
for (iter = accumulator.begin(); iter != accumulator.end(); ++iter) {
char* input_file = str_to_char(*iter); // my own function that converts string to char* (needed that for another method later on in the code)
std::cout << "--> considering file " << input_file << "... \n";
}

关于c++ - 使用模式正则表达式匹配的排序目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com