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

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

プレーン配列の使用も可能です。次に、配列で許可されているよりも多くの行がある場合は、配列を上書きしないようにする必要があります。

1行に常に3つの数値がある場合は、これを利用して、最初の2つの数値をで分割し;、3番目の数値をで分割することもできます。\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);
}

しかし、もちろん、これは失敗します。1行に3つ以上の数字がある場合、またはさらに悪いことに、2つ以上の行がある場合です。

于 2013-01-13T15:40:14.213 に答える