1

各行に従業員情報 (ID、部門、給与、名前) を含むファイルがあります。以下に行の例を示します。

45678 25 86400 Doe, John A.

現在、名前の部分に到達するまで機能する fstream を使用して各単語を読み込んでいます。私の質問は、その名前全体をキャプチャする最も簡単な方法は何ですか?

Data >> Word;
while(Data.good())
{
    //blah blah storing them into a node
    Data >> Word;
}
4

3 に答える 3

1
#include <fstream>
#include <iostream>
int main() {
  std::ifstream in("input");
  std::string s;
  struct Record { int id, dept, sal; std::string name; };
  Record r;
  in >> r.id >> r.dept >> r.sal;
  in.ignore(256, ' ');
  getline(in, r.name);
  std::cout << r.name << std::endl;
  return 0;
}
于 2012-12-05T20:55:56.223 に答える
1

おそらくstruct、従業員のデータを保持するために を定義operator>>し、ファイルからそれらのレコードの 1 つを読み取るために のオーバーロードを定義する必要があります。

struct employee { 
    int id;
    int department;
    double salary;
    std::string name;

    friend std::istream &operator>>(std::istream &is, employee &e) { 
       is >> e.id >> e.department >> e.salary;
       return std::getline(is, e.name);
    }
};

int main() { 
    std::ifstream infile("employees.txt");

    std::vector<employee> employees((std::istream_iterator<employee>(infile)),
                                     std::istream_iterator<employee>());

    // Now all the data is in the employees vector.
}
于 2012-12-05T21:22:14.233 に答える
0

レコードを作成し、入力演算子を定義します

class Employee
{
    int id;
    int department;
    int salary;
    std::string name;

    friend std::istream& operator>>(std::istream& str, Employee& dst)
    {
        str >> dst.id >> dst.department >> dst.salary;
        std::getline(str, dst.name); // Read to the end of line
        return str;
    }
};

int main()
{
    Employee  e;
    while(std::cin >> e)
    {
         // Word with employee
    }
}
于 2012-12-05T21:24:34.613 に答える