fork download
  1. #include <iostream>
  2. #include <stdexcept>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <sstream>
  6.  
  7. using std::cout;
  8. using std::endl;
  9.  
  10. std::size_t const BUF_SIZE(1000);
  11.  
  12. std::ostream& operator<<(std::ostream& os, std::tm const& rhs)
  13. {
  14. os << asctime(&rhs);
  15. return os;
  16. }
  17.  
  18. std::istream& operator>>(std::istream& is, std::tm& rhs)
  19. {
  20. while (is.peek() == ' ' || is.peek() == '\t')
  21. {
  22. is.get();
  23. }
  24. std::streampos curPos = is.tellg();
  25. char buf[BUF_SIZE];
  26. is.getline(buf, BUF_SIZE);
  27. char* ptr = strptime(buf, "%D %T", &rhs);
  28. if (ptr == 0)
  29. {
  30. throw std::runtime_error("strptime() failed!");
  31. }
  32. std::size_t processed = ptr - buf;
  33. is.seekg(curPos + static_cast<std::streampos>(processed));
  34. return is;
  35. }
  36.  
  37. int main()
  38. {
  39. std::istringstream is("10101 07/09/12 07:30:00 123.24");
  40. int uuid(0);
  41. double price(0);
  42. std::tm ptime; std::memset(&ptime, 0, sizeof(tm));
  43.  
  44. is >> uuid >> ptime >> price;
  45. cout << "UUID: " << uuid << endl;
  46. cout << "Time: " << ptime;
  47. cout << "Price: " << price << endl;
  48. }
  49.  
Success #stdin #stdout 0s 3064KB
stdin
Standard input is empty
stdout
UUID: 10101
Time: Mon Jul  9 07:30:00 2012
Price: 0