homer512 icon

C++ input parsing

homer512 | PRO | 03/07/15 11:55:19 AM UTC | 0 ⭐ | 641 👁️ | Never ⏰ | []
C++ |

1.13 KB

|

None

|

0 👍

/

0 👎

#include <fstream>
// using std::ifstream
#include <iostream>
// using std::cout, std::cerr
#include <vector>
// using std::vector
#include <string>
// using std::string, std::getline
 
 
int main()
{
  std::vector<std::string> keys;
  std::vector<int> values;
  const char* fname = "house_repairs.txt";
  std::ifstream input(fname);
  if(! input) {
    std::cerr << "unable to open " << fname << std::endl;
    return 1;
  }
  while(input) {
    /* first attempt to read an integer. If that fails, it must be a key */
    int value;
    if(input >> value)
      values.push_back(value);
    else if(input.fail()) {
      input.clear();
      std::string line;
      if(std::getline(input, line))
    keys.push_back(line);
    }
    if(input.bad()) {
      std::cerr << "IO error" << std::endl;
      return 1;
    }
  }
  for(std::vector<std::string>::iterator i = keys.begin(); i != keys.end();
      ++i)
    (std::cout << "Got key " << *i).put('\n');
  for(std::vector<int>::iterator i = values.begin(); i != values.end(); ++i)
    (std::cout << "Got value " << *i).put('\n');
  std::cout.flush();
  return 0;
}

Comments