The End?

Started by
6 comments, last by Kokiri Kid 22 years ago
I am writing a C++ program that counts the letters, spaces, etc. in a text file. I want to implement how many end of line characters are used but am unsure of how to do this. Can someone please help me, it would greatly be appreciated.
Advertisement
Hi there,
I think ifstream has a method called getline(). Which perhaps behaves the way you want, but i'm not sure. You know that on windows you have two characters describing the end of a line ?

Good luck,
NextS


[edited by - NextS on March 20, 2002 8:14:32 PM]
Yes I have tried to show a character doing the end of a line like this:


   if ((ch == 2) || (ch == 3))  {    endline++;  }  


But this does not work. The 2 and 3 are for start of line and end of line. And the ch is for the incoming text.

[edited by - Kokiri Kid on March 20, 2002 8:20:19 PM]

[edited by - Kokiri Kid on March 20, 2002 8:20:59 PM]
Hi there.
ahm. Dunno.

A simple test looks like this:


        #include <fstream>using namespace std;int main ( int argc, char ** argv ){        ifstream file ("dummy.txt" );        int linecount = 0;        while (!file.eof())        {                unsigned char ch;                file.get( ch );                if (!file.eof())                {                        if (ch == '\n' || ch == '\r' )                                linecount++;                        cerr << ch;                }        }        cerr << "\n" << linecount << " "<<(int)'\n' << " " <<(int)'\r' << endl;}<SPAN CLASS=editedby>[edited by - NextS on March 20, 2002 9:05:36 PM]</SPAN>  
Enjoy:


  #include <iostream>#include <fstream>#include <string>int main(){	std::ifstream inputStream("test.cpp");	int count = 0;		while (std::getline(inputStream, std::string(), ''\n''))	{		++count;	}	std::cout << "Number of lines in file: " << count << std::endl;	return 0;}  
If you wish to count any character type, then you can make use of the STL count algorithm. Here''s an example that uses 4 statements to read in a text file and count the number of spaces:


  #include <fstream>#include <iterator>#include <algorithm>#include <vector>#include <functional>using namespace std;typedef char elem;typedef vector<elem> container;int main(){	container c;	ifstream input( "test.txt" );	if(input)		copy(	istreambuf_iterator<elem>(input), 				istreambuf_iterator<elem>(),				back_inserter(c));	int num = count( c.begin(), c.end(), '' '');}  


The third statement reads the entire file into the vector of characters, and the final statement counts all the elements of the vector which match the given pattern (space). I think you can guess how to count newlines, etc.
Copying the stream into a vector is redundant because you can just use istream_iterators when using std::count. If your worried about effeciency, you could supply a custom functor that counts based on the current character (i.e. to avoid you having to loop through everytime you want to count a new character).
But you don''t know what is appropriate for the problem, so you can''t make that sort of design decision. I''ve merely demonstrated mechanism.

This topic is closed to new replies.

Advertisement