我可以循环只有整数的文件名吗?

时间:2017-03-01 23:41:37

标签: c++ for-loop

我有100个名为" realization_i.dat"的文件,其中i是0到99之间的整数。

我想循环遍历每个文件,以便导入数据以便在我的代码中进行操作。

我不确定如何做到这一点,但这是我到目前为止所做的:

for (int i = 0; i < 99; i++) {

    string path = "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/";
    string mainFile = path + "realization_" << i << ".dat";
    vector <double> Pos1, Pos2, E1, E2, Z, W, SC;
    ifstream in(mainFile.c_str(), ios::in);

我的想法是,对于i = 0,我将输入数据来自realization_0.dat文件,然后是realize_1.dat文件等,直到实现_99.dat。

我收到以下错误:

ShearStacks.cpp:41:49: error: invalid operands to binary expression
      ('std::__1::basic_string<char>' and 'int')
        string mainFile = path + "realization_" << i << ".dat";

任何人都可以解释为什么这不起作用并建议循环文件的新方法吗? (C ++的新手。)

3 个答案:

答案 0 :(得分:1)

根据operator precedence+操作将首先发生。 (path + "realization_") << i << ".dat";然后编译器将尝试在结果<<std::string之间找到一个合适的运算符int,该运算符不可用,然后它会阻塞。

您可能希望使用std::to_string将数字转换为字符串:

for (int i = 0; i < 2; i++) {

    string path = "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/";

    string mainFile = path + "realization_" + std::to_string(i) + ".dat";

    vector <double> Pos1, Pos2, E1, E2, Z, W, SC;
    ifstream in(mainFile.c_str(), ios::in);
    ......
}

答案 1 :(得分:0)

字符串不是流!

使用普通的字符串连接:

 string mainFile = path + "realization_" + std::to_string(i) + ".dat";

请注意to_string仅从C ++ 11开始提供。

答案 2 :(得分:0)

字符串'mainFile'不能那样使用。

我建议使用std :: stringstream:

std::stringstream ss;
ss << "/Users/Olly/Documents/BScProject/WeakLensing/SIGNAL/"
   << "realization_" << i << ".dat";

std::string mainFile = ss.str();