将文件内容复制到多维数组中

时间:2013-01-13 13:54:55

标签: c++ file-io multidimensional-array

我创建了一个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数组?

1 个答案:

答案 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);
}

但是,如果你连续有三个以上的数字,或者更糟糕的是,有两行以上,那么这当然会失败。