#include <iostream>
#include <stdexcept>
#include <cstring>
#include <ctime>
#include <sstream>
using std::cout;
using std::endl;
std::size_t const BUF_SIZE(1000);
std::ostream& operator<<(std::ostream& os, std::tm const& rhs)
{
os << asctime(&rhs);
return os;
}
std::istream& operator>>(std::istream& is, std::tm& rhs)
{
while (is.peek() == ' ' || is.peek() == '\t')
{
is.get();
}
std::streampos curPos = is.tellg();
char buf[BUF_SIZE];
is.getline(buf, BUF_SIZE);
char* ptr = strptime(buf, "%D %T", &rhs);
if (ptr == 0)
{
throw std::runtime_error("strptime() failed!");
}
std::size_t processed = ptr - buf;
is.seekg(curPos + static_cast<std::streampos>(processed));
return is;
}
int main()
{
std::istringstream is("10101 07/09/12 07:30:00 123.24");
int uuid(0);
double price(0);
std::tm ptime; std::memset(&ptime, 0, sizeof(tm));
is >> uuid >> ptime >> price;
cout << "UUID: " << uuid << endl;
cout << "Time: " << ptime;
cout << "Price: " << price << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8c3N0cmVhbT4KCnVzaW5nIHN0ZDo6Y291dDsKdXNpbmcgc3RkOjplbmRsOwoKc3RkOjpzaXplX3QgY29uc3QgQlVGX1NJWkUoMTAwMCk7CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgc3RkOjp0bSBjb25zdCYgcmhzKQp7ICAgCiAgICBvcyA8PCBhc2N0aW1lKCZyaHMpOwogICAgcmV0dXJuIG9zOyAKfSAgIAoKc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaXMsIHN0ZDo6dG0mIHJocykKeyAgIAogICAgd2hpbGUgKGlzLnBlZWsoKSA9PSAnICcgfHwgaXMucGVlaygpID09ICdcdCcpCiAgICB7ICAgCiAgICAgICAgaXMuZ2V0KCk7CiAgICB9ICAgCiAgICBzdGQ6OnN0cmVhbXBvcyBjdXJQb3MgPSBpcy50ZWxsZygpOwogICAgY2hhciBidWZbQlVGX1NJWkVdOwogICAgaXMuZ2V0bGluZShidWYsIEJVRl9TSVpFKTsKICAgIGNoYXIqIHB0ciA9IHN0cnB0aW1lKGJ1ZiwgIiVEICVUIiwgJnJocyk7CiAgICBpZiAocHRyID09IDApCiAgICB7ICAgCiAgICAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJzdHJwdGltZSgpIGZhaWxlZCEiKTsKICAgIH0gICAKICAgIHN0ZDo6c2l6ZV90IHByb2Nlc3NlZCA9IHB0ciAtIGJ1ZjsKICAgIGlzLnNlZWtnKGN1clBvcyArIHN0YXRpY19jYXN0PHN0ZDo6c3RyZWFtcG9zPihwcm9jZXNzZWQpKTsKICAgIHJldHVybiBpczsgCn0gICAKCmludCBtYWluKCkKeyAgIAogICAgc3RkOjppc3RyaW5nc3RyZWFtIGlzKCIxMDEwMSAwNy8wOS8xMiAwNzozMDowMCAxMjMuMjQiKTsKICAgIGludCB1dWlkKDApOwogICAgZG91YmxlIHByaWNlKDApOwogICAgc3RkOjp0bSBwdGltZTsgc3RkOjptZW1zZXQoJnB0aW1lLCAwLCBzaXplb2YodG0pKTsKCiAgICBpcyA+PiB1dWlkID4+IHB0aW1lID4+IHByaWNlOwogICAgY291dCA8PCAiVVVJRDogIiA8PCB1dWlkIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJUaW1lOiAiIDw8IHB0aW1lOwogICAgY291dCA8PCAiUHJpY2U6ICIgPDwgcHJpY2UgPDwgZW5kbDsKfQo=