title: C++ Parse string into different data type variables
body: <p>I need to parse a string into variables with varying data types (ints, strings).</p>
  
  <p>The string in question was taken from a line in a file.</p>
  
  <p>I'm wondering if there is a function similar to inFile >> var1 >> var2 >> etc; that I can use for a string. Below is the full line from the file.</p>
  
  <p>2016/12/6 s "The incestuous relationship between government and big business thrives in the dark. ~Jack Anderson [4]" 0 3 39 blue white PATRICK BARDWELL   pat.bardwell@bwpmlp.com</p>
  
  <p>I have already assigned "2016/12/6," "s," and everything between the quotation marks to variables using inFile >> ;. Also, I took everything after the final occurrence of a double quote and stored that into the string restOfLine. Now, I'd like to parse restOfLine into variables for each value (0, 3, 39, blue, white, Patrick, Bardwell, pat.bardwell@bwpmlp.com should all be separate variables). Is there a method like inFile >> that I can use to do this? I also tried separating them with restOfline.find() and restOfLine.substr() but haven't been able to figure it out. Similarly, if I can separate each value from the entire line more efficiently than my current code, I'd prefer that. Current code below. Any help is much appreciated.</p>
  
  <pre><code>int main()
  {
  
      // Declare variables
      string userFile;
      string line;
      string date;
      char printMethod;
      string message;
      int numMedium;
      int numLarge;
      int numXL;
      string shirtColor;
      string inkColor;
      string firstName;
      string lastName;
      string customerEmail;
      string firstLine;
      string restOfLine;
  
  
      // Prompt user to 'upload' file
  
      cout &lt;&lt; "Please input the name of your file:\n";
      cin &gt;&gt; userFile;
      fstream inFile;
      inFile.open(userFile.c_str());
  
      // Check if file open successful -- if so, process
  
      if (inFile.is_open())
      {
          getline(inFile, firstLine); // get column headings out of the way
          cout &lt;&lt; firstLine &lt;&lt; endl &lt;&lt; endl;
  
          while(inFile.good()) 
  // while we are not at the end of the file, process
          {
  
              getline(inFile, line);
  
              inFile &gt;&gt; date &gt;&gt; printMethod; // assigns first two values of line to date and printMethod, respectively
  
              int pos1 = line.find("\""); 
  // find first occurrence of a double quotation mark and assign position value to pos1
              int pos2 = line.rfind("\""); 
  // find last occurrence of a double quotation mark and assign position value to pos2
  
              string message = line.substr(pos1, (pos2 - pos1)); 
  // sets message to string between quotation marks
  
              string restOfLine = line.substr(pos2 + 2); 
  // restOfLine = everything after the message -- used to parse
  
          }
  
          inFile.close();
      }
  
      // If file open failure, output error message, exit with return 0;
  
      else
      {
  
          cout &lt;&lt; "Error opening file";
  
      }
  
      return 0;
  
  }
  </code></pre>