#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
struct itemInfo
{
int quantity;
std::string name;
double price;
};
std::istream& operator>>(std::istream &in, itemInfo &item)
{
try
{
std::string line;
if (std::getline(in, line))
{
auto start = line.find_first_not_of(" \t");
auto stop = line.find_first_of(" \t", start + 1);
item.quantity = std::stoi(line.substr(start, stop - start));
start = line.find_first_not_of(" \t", stop + 1);
stop = line.find(" at ", start);
item.name = line.substr(start, stop - start);
start = line.find_first_not_of(" \t", stop + 4);
item.price = std::stod(line.substr(start));
}
}
catch (const std::logic_error &)
{
in.setstate(std::ios_base::failbit);
}
return in;
}
int main()
{
itemInfo item;
std::vector<itemInfo> items;
while (std::cin >> item)
{
items.push_back(item);
}
// use items as needed...
for(auto &item : items)
{
std::cout << item.name << ": " << item.quantity << " @ " << item.price << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkZXhjZXB0PgoKc3RydWN0IGl0ZW1JbmZvCnsKICAgIGludCBxdWFudGl0eTsKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBkb3VibGUgcHJpY2U7Cn07CgpzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZpbiwgaXRlbUluZm8gJml0ZW0pCnsKICAgIHRyeQogICAgewogICAgICAgIHN0ZDo6c3RyaW5nIGxpbmU7CgogICAgICAgIGlmIChzdGQ6OmdldGxpbmUoaW4sIGxpbmUpKQogICAgICAgIHsKICAgICAgICAgICAgYXV0byBzdGFydCA9IGxpbmUuZmluZF9maXJzdF9ub3Rfb2YoIiBcdCIpOwogICAgICAgICAgICBhdXRvIHN0b3AgPSBsaW5lLmZpbmRfZmlyc3Rfb2YoIiBcdCIsIHN0YXJ0ICsgMSk7CiAgICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgPSBzdGQ6OnN0b2kobGluZS5zdWJzdHIoc3RhcnQsIHN0b3AgLSBzdGFydCkpOwoKICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCBzdG9wICsgMSk7CiAgICAgICAgICAgIHN0b3AgPSBsaW5lLmZpbmQoIiBhdCAiLCBzdGFydCk7CiAgICAgICAgICAgIGl0ZW0ubmFtZSA9IGxpbmUuc3Vic3RyKHN0YXJ0LCBzdG9wIC0gc3RhcnQpOwoKICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCBzdG9wICsgNCk7CiAgICAgICAgICAgIGl0ZW0ucHJpY2UgPSBzdGQ6OnN0b2QobGluZS5zdWJzdHIoc3RhcnQpKTsKICAgICAgICB9CiAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpsb2dpY19lcnJvciAmKQogICAgewogICAgICAgIGluLnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOyAKICAgIH0KCiAgICByZXR1cm4gaW47Cn0KCmludCBtYWluKCkKewogICAgaXRlbUluZm8gaXRlbTsKCXN0ZDo6dmVjdG9yPGl0ZW1JbmZvPiBpdGVtczsKCiAgICB3aGlsZSAoc3RkOjpjaW4gPj4gaXRlbSkKICAgIHsgCiAgICAgICAgaXRlbXMucHVzaF9iYWNrKGl0ZW0pOwogICAgfQoKICAgIC8vIHVzZSBpdGVtcyBhcyBuZWVkZWQuLi4KICAgIAogICAgZm9yKGF1dG8gJml0ZW0gOiBpdGVtcykKICAgIHsKICAgIAlzdGQ6OmNvdXQgPDwgaXRlbS5uYW1lIDw8ICI6ICIgPDwgaXRlbS5xdWFudGl0eSA8PCAiIEAgIiA8PCBpdGVtLnByaWNlIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==