我有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 ++的新手。)
答案 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();