/********************************************************/ // R. A. Hillyard // wordCount2.cpp // March 2001 // // See wordCount1.cpp for comments // // This version reads floating point numbers as a single word /********************************************************/ #include<iostream> #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; //next character in the file int wordCount=0; //keep track of count double temp; //need a temp variable when reading numbers ifstream inData; //declare file streams ofstream outData; //open files for reading - check for failure if( !openFiles(inData, outData)) { exit(1); } //Read data from file a character at a time inData.get(next); while(!inData.eof()) //stop at end of file { //skip any stopping cases if(isspace(next) || next == ',' || next == '.') {inData.get(next);} //get next word - read characters until a stopping case or EOF. else { if(isdigit(next)) //check for number - read as float { inData.putback(next); //put digit back inData >> temp; //read as a double - will catch all legal numbers (ints, floats, doubles) outData << temp << endl; //echo number to output file wordCount++; //increment count inData.get(next); //get next character } else //read a word and echo to file one per line { 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 //report results 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("helloCount2.txt"); if(outData.fail()) { cout << "Failed to open output file\n"; return false; } return true; }//end openFiles /*************************************************************/