1

テキスト ファイルに次のような行があるとします。

1    4:48:08   Orvar Steingrimsson                 1979   30 - 39 ara      IS200 
2    4:52:25   Gudni Pall Palsson                  1987   18 - 29 ara      IS870 

このデータを新しいテキスト ファイルに出力するにはどうすればよいでしょうか。ただし、年 - 名前 - 時間の 3 つだけがリストされているため、これらの 2 行は次のようになります。

1979   Orvar Steingrimsson   4:48:08
1987   Gudni Pall Palsson    4:52:25

私の推測はこれでした:

ifstream in("inputfile.txt");
ofstream out("outputfile.txt");
int score, year;
string name, time, group, team;
while (getline(in,str));
in >> score >> time >> name >> year >> group >> team;
//and then do something like this
out << year << name << time << '\n';

ただし、テキスト ファイル全体と 200 行すべてをループすることはできないと感じています。どんなヒントでも大歓迎です!

4

2 に答える 2

0

部分文字列を抽出した後、strtol()(またはstd::stoi()C++.11 を使用している場合は) を呼び出して、文字列を整数に変換できます。年とデータ行の両方を取得したら、それらを何らかのテーブル (おそらくstd::multimap<>.

C++.11 を使用しない場合:

void process (std::istream &in, std::ostream &out) {
    typedef std::multimap<int, std::string> table_type;
    table_type data_by_year;
    std::string str;
    while (std::getline(in,str)) {
        int year = strtol(str.substr(54, 4).c_str(), 0, 10);
        data_by_year.insert(std::make_pair(year, str));
    }
    for (table_type::iterator i = data_by_year.begin();
         i != data_by_year.end();
         ++i) {
        out << i->second << "\n";
    }
}

C++.11 の場合:

void process (std::istream &in, std::ostream &out) {
    std::multimap<int, std::string> data_by_year;
    std::string str;
    while (std::getline(in,str)) {
        int year = std::stoi(str.substr(54, 4));
        data_by_year.insert(std::make_pair(year, str));
    }
    for (auto v : data_by_year) {
        out << v.second << "\n";
    }
}
于 2013-09-26T23:48:38.417 に答える