我有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<float> temp01;
vector<float> temp12;
vector<float> 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<float> 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);
}
}
}