#include #include #include struct Record { std::string name; int count; }; bool parse_record(const std::string& line, Record& out) { std::istringstream input(line); std::string name; int count = 0; if (!(input >> name >> count) || count < 0) return false; input >> std::ws; if (!input.eof()) return false; out.name.swap(name); out.count = count; return true; } int main() { Record record{"old", 8}; assert(parse_record("alpha 3 ", record)); assert(record.name == "alpha" && record.count == 3); for (const std::string line : {"beta -1", "beta 2 extra", "beta 2x", "beta", ""}) { assert(!parse_record(line, record)); assert(record.name == "alpha" && record.count == 3); } assert(parse_record("zero 0", record)); assert(record.name == "zero" && record.count == 0); }