/********************************************************/
// R. A. Hillyard
// wordCount1.cpp
// Oct 2000
//
// Program reads a file character by character
// and keeps track of the number of words in the file.
// A word is any string of characters that is proceded and
// followed by one of the following at each end:
// a white space (space, tab, new line), a comma (",") or a period (".")
/********************************************************/

#include<iostream>
#include<iomanip>
#include<fstream>
#include<cctype>

using namespace std;

bool openFiles(ifstream& inData, ofstream& outData);
//pre conditions: inData and outData have been declared as file streams
//post condition: inData and outData will have been opened and function returns true
//                if a file fails to open - return false


int main()
  {
  char next;
  int wordCount = 0;

  ifstream inData;  //declare file streams
  ofstream outData;

  //open files for reading - check for failure
  if( !openFiles(inData, outData))
    {
    exit(1);  
    }

  //Read data from file
  inData.get(next);  
  while(!inData.eof()) 
    {
    //skip any stopping cases
    if(isspace(next) || next == ',' || next == '.')
      {
      inData.get(next);
      }
    //get next word - read characters until a stopping case or EOF.
    else
      {
      do{
        outData.put(next);  //echo character to a file
        inData.get(next);   //get next char
        }while( !(isspace(next) || next == ',' || next == '.') && !inData.eof());
      
      wordCount++;         //update count
      outData.put('\n');   //print new line to file
      }
    }//end while
    
  outData << "there were " << wordCount << " words in the file\n";
  }//end main

/*************************************************************/
/*************************************************************/

bool openFiles(ifstream& inData, ofstream& outData)
  {
  inData.open("hello.txt");
  if(inData.fail())
    {
    cout << "Failed to open input file\n";
    return false;  
    }
    
  outData.open("helloCount1.txt");
  if(outData.fail())
    {
    cout << "Failed to open output file\n";
    return false;  
    }
  return true;  
  }//end openFiles

/*************************************************************/

/*************************************************************/