使用istringstream将数据读入结构体

Reading data into struct with istringstream

本文关键字:结构体 数据 istringstream 使用      更新时间:2023-10-16

假设我有一个包含五个数据成员的结构体:

struct Info {
    std::string name;
    std::string last_name;
    std::string school;
    int age;
    int dob;
}

和格式为:Joe Bob University 18 050797的字符串,其中每个字段表示我想要读入结构体每个成员的内容。我想确切地知道,结构体中的每个数据成员都在一个值中被读取,并且读取没有失败。是否有一种优雅的方式来实现这一点?

void fill_info(const std::string &line, Info *fields) {
    istringstream ss(line);
    ss >> fields->name;
    ss >> fields->last_name;
    ss >> fields->school;
    ss >> fields->age;
    ss >> fields->dob;
}

您可以在一行中执行插入并测试流

if(!(ss >> fields->name >> fields->last_name >>
     fields->school >> fields->age >> fields->dob))
    std::cout << "error reading the data";

如果您想确切地看到哪个字段失败了,您可以测试每个单独的插入。然后,您可以验证输入。