Вот мой код для вас.
struct Record
{
std::string first_name;
std::string last_name;
unsigned int age; // Ever hear of a negative age?
friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record& r)
{
input >> r.first_name;
std::getline(input, r.last_name, '#');
input >> r.age;
return input;
}
Вот ввод l oop:
std::vector<Record> database;
Record r;
while (ins >> r)
{
database.push_back(r);
}
Поскольку имя и фамилия разделены пробелом, operator>>
можно использовать для чтения имени ,
При чтении фамилии используется форма std::getline
с параметром-разделителем. Функция будет читать символы, сохраняя их в строку, пока не будет прочитан разделитель. Функция не хранит разделитель.
Поскольку позиция входного потока находится за «#», operator>>
может использоваться для чтения в возрасте.
При следующем чтении пропустится оставшаяся новая строка (потому что это пробел), будет прочитано имя второй записи и т. Д.
operator>>
перегружен в структуре Record
для увеличения инкапсуляции и уменьшения плотно связанных модулей. Record
знает о своих членах, а внешние лица не должны.