1

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

4

1 回答 1

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

也可以使用普通数组。然后,您必须确保当您的行数超过数组允许的数量时,您不会覆盖数组。

如果您总是在一行中有三个数字,您也可以利用它并将前两个数字拆分为 at;和第三个数字 at\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);
}

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

于 2013-01-13T15:40:14.213 回答