C ++顺序读取多个输入文件

我有47个不同的文件:

  • 001_template.dat
  • 047_template.dat

在名为/ data的目录中。 我需要将每个模板文件与三个不同的查询文件进行比较,也可以在目录中进行比较。 这些被命名为:

  • 001_AU01_query.dat
  • 001_AU12_query.dat
  • 001_AU17_query.dat。

我知道如何让所有这些运行,但我将不得不将这6行代码剪切并粘贴46次,程序将变得非常长且令人困惑。

是否有一种循环这些文件的好方法? 可能通过循环模板文件,然后对每个模板进行三次查询? 我显然有一个相似性函数和一个已定义的排序函数,以及inputFile 。 这是我想要转换的代码:(不是作业,这是我一直在做的面部表情识别项目)

 int main() { vector temp01; vector temp12; vector temp17; temp01 = similar(inputFile("data/001_AU01_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp01); temp12 = similar(inputFile("data/001_AU12_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp12); temp17 = similar(inputFile("data/001_AU17_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp17); } 

然后我将使用sprintf创建文件名到循环中:

 char data[100]; char template[100]; char* datas[3] = {"%3d_AU01_query.dat", "%3d_AU12_query.dat", "%3d_AU17_query.dat"}; for(i=0; i<47; i++){ for{j=0; j<3; j++){ sprintf(template, "%03d_template.dat", i); // create the name of the template 1-47 sprintf(data, datas[j], i); compare(template, data); } } 

我认为这应该按预期工作。

使用两个包含文件和模板名称的数组并循环它们:

 char* files[47] = {"file1", "file2", ...., "file47"}; char* templates[3] = {"template1", "template2", "template3"}; 

并循环它们:

 for(i=0; i<47; i++){ for{j=0; j<3; j++){ compare(file[i],template[j]); } } 
 void work() { vector temp; char data[100]; char templates[100]; char* datas[3] = { "data/%03d_AU01_query.dat", "data/%03d_AU12_query.dat", "data/%03d_AU17_query.dat" }; for (int i = 1; i < 48; i++) { for(int j = 0; j < 3; j++) { sprintf_s(templates, "data/%03d_template.dat", i); // create the name of the template 1-47 sprintf_s(data, datas[j], i); temp01 = similar(inputFile(data), inputFile(templates)); sortAndOutput(temp); } } }