Input line by line from an input file and tokenize using strtok() and the output into an output file

Input line by line from an input file and tokenize using strtok() and the output into an output file

What I am trying to do is to input a file LINE BY LINE and tokenize and output into an output file.What I have been able to do is input the first line in the file but my problem is that i am unable to input the next line to tokenize so that it could be saved as a second line in the output file,this is what i could do so far fro inputing the first line in the file.
#include 
#include    //string library
#include    //I/O stream input and output library

using namespace std;
const int MAX=300;    //intialization a constant called MAX for line length 
int main()
{
   ifstream in;     //delcraing instream
   ofstream out;    //declaring outstream

   char oneline[MAX];   //declaring character called oneline with a length MAX

   in.open("infile.txt");  //open instream
   out.open("outfile.txt");  //opens outstream
   while(in)
   {

    in.getline(oneline,MAX); //get first line in instream

    char *ptr;      //Declaring a character pointer
    ptr = strtok(oneline," ,");
    //pointer scans first token in line and removes any delimiters


  while(ptr!=NULL)
   {

    out<

Solutions/Answers:

Answer 1:

The C++ String Toolkit Library (StrTk) has the following solution to your problem:

#include <iostream>
#include <string>
#include <deque>
#include "strtk.hpp"

int main()
{
   std::deque<std::string> word_list;
   strtk::for_each_line("data.txt",
                        [&word_list](const std::string& line)
                        {
                           const std::string delimiters = "\t\r\n ,,.;:'\""
                                                          "!@#$%^&*_-=+`~/\\"
                                                          "()[]{}<>";
                           strtk::parse(line,delimiters,word_list);
                        });

   std::cout << strtk::join(" ",word_list) << std::endl;

   return 0;
}

More examples can be found Here

Answer 2:

You are using C runtime library when C++ makes this neater.

Code to do this in C++:

ifstream in;     //delcraing instream
ofstream out;    //declaring outstream

string oneline;

in.open("infile.txt");  //open instream
out.open("outfile.txt");  //opens outstream
while(getline(in, oneline))
{
    size_t begin(0); 
    size_t end;
    do
    {
        end = oneline.find_first_of(" ,", begin);

        //outputs file into copy file
        out << oneline.substr(begin, 
                    (end == string::npos ? oneline.size() : end) - begin) << ' ';

        begin = end+1;
        //pointer moves to second token after first scan is over 
    }
    while (end != string::npos);
}

in.close();      //closes in file
out.close();      //closes out file

Input:

a,b c

de fg,hijklmn

Output:

a b c de fg hijklmn

If you want newlines, add out << endl; at the appropriate point.

References