0

番号付きのファイルがあります。

3
2 15 41
4 1 2 3 4
3 22 11 24

最初の行は、他の行がどのように存在するかを示しています(最大100)。行の数字は50を超えることはできません。

行の数字は、次のような配列に入れる必要があります。

line[lineNum][num]

私はC++を初めて使用し、可能な限り簡単な方法でこれを実行するように求めています。私はやってみました:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    int kiek;
    string str[100][50];
    string line;
    int a = 0;
    int b = 0;

    ifstream failas("Duom1.txt");

    if (failas.is_open())
    {                     
        while (failas)
        {
            if (a == 29)
            {
                  a = 0;
                  b++;
            }

            getline(failas, str[a][b], ' ');

        }

        a++;
    }

    cout << str[0][0] << endl;
}
4

1 に答える 1

2

ファイルを1行ずつ読み取り、すべての行を単独で解析します。

if (failas.is_open())
{
    // read first line
    string num_lines;
    std::getline(failas, num_lines);
    // read lines
    for (int i = 0; std::getline(failas, line); ++i)
    {
        // parse line and insert into array
        std::istringstream is(line);
        string number;
        for (int j = 0; is >> number; ++j)
            str[i][j] = number;
    }
}

ただし、より良いアプローチstd::vectorは、配列の代わりに使用することです。

std::vector<std::vector<int> > all_nums;
...
// read first line
string num_lines;
std::getline(failas, num_lines);
// read lines
while (std::getline(failas, line)) {
    // parse line and insert into vector
    std::istringstream is(line);
    int number;
    std::vector<int> line_nums;
    while (is >> number)
        line_nums.push_back(number);

    // add line to vector
    all_nums.push_back(line_nums);
}
于 2012-11-16T07:35:18.080 に答える