我创建了一个c ++应用程序来将文件内容读入数组:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream myfile;
myfile.open("myfile.txt");
int a[3];
int counter = 0;
char s[10];
while (!myfile.eof())
{
myfile.getline(s, 10,';');
a[counter]=atoi(s);
counter++;
}
for (int i = 0 ; i<3 ; i++)
cout << a[i]<<endl;
cin.get();
}
和内容,如果我的文件是:
15;25;50
它工作正常
我的问题是: 如果我将文件更改为:
15;25;50
12;85;22
如何将所有文件读入3 * 2数组?
答案 0 :(得分:2)
您有两个分隔符,;
和换行符(\n
),这使问题复杂化了一些。您可以阅读完整的行并在之后拆分此行。我还建议使用std::vector
而不是普通数组
std::vector<std::vector<int> > a;
std::string line;
while (std::getline(myfile, line)) {
std::vector<int> v;
std:istringstream ss(line);
std::string num;
while (std::getline(ss, num, ';')) {
int n = atoi(num);
v.push_back(n);
}
a.push_back(v);
}
也可以使用普通数组。当你有比阵列允许的更多行时,你必须确保不会覆盖数组。
如果您在一行中始终有三个数字,您也可以使用此功能并将前两个数字分开到;
,将第三个数字分成\n
int a[2][3];
for (int row = 0; std::getline(myfile, s, ';'); ++row) {
a[row][0] = atoi(s);
std::getline(myfile, s, ';'));
a[row][1] = atoi(s);
std::getline(myfile, s));
a[row][2] = atoi(s);
}
但是,如果你连续有三个以上的数字,或者更糟糕的是,有两行以上,那么这当然会失败。