#include <fstream>
#include <iostream>
#include <list>
#include "main.h"
list<wentry *> w_table;
wentry *find_str(string s)
{
list<wentry *>::const_iterator iter;
wentry *w = NULL;
for ( iter = w_table.begin(); iter != w_table.end(); iter++ )
{
if ( (*iter)->GetStr() == s )
{
w = (*iter);
break;
}
}
return w;
}
int main()
{
list<wentry *>::iterator iter;
ifstream f;
string s,line;
wentry *w = NULL;
int i,j,k = 0;
unsigned int count = 0; list<wentry> w_table2;
list<wentry>::iterator iter2;
cout << "\n\nWhat file shall we get input from?\n";
cin >> s;
f.open(s.c_str());
if ( !f )
return EXIT_FAILURE;
else
s = "";
while ( 1 )
{
getline( f, line );
line += ' '; if ( f.eof() )
break;
for ( j = line.length(), i = 0; i < j; i++ )
{
line[i] = tolower(line[i]);
if ( (ispunct(line[i]) != 0 && line[i] != '\'') || iscntrl(line[i]) != 0 )
line[i] = ' ';
}
k = 0;
while ( 1 )
{
s = "";
i = k;
for ( ; i < j; i++ )
if ( line[i] != ' ' )
break;
if ( i == j )
break;
for ( k = i; k < j; k++ )
if ( line[k] == ' ' )
break;
s = line.substr(i, k-i );
count++;
if( (w = find_str(s)) == NULL )
{
w = new wentry(s); w_table.push_back(w);
}
else ++(*w);
} }
for ( iter = w_table.begin(), iter2 = w_table2.begin(); iter != w_table.end(); iter++, iter2++ )
w_table2.push_back(*(*iter));
w_table2.sort(); w_table2.reverse(); cout << "\n\n\nResults:\n--------\n\n";
for (iter2 = w_table2.begin(); iter2 != w_table2.end(); iter2++ )
cout << " " <<(*iter2).GetRef() << " " << (*iter2).GetStr() << endl;
cout << "\n\n\nTotal Words: " << count << endl << endl;
f.close();
return EXIT_SUCCESS;
}
wentry::wentry()
{
mStr = "";
mRef = 0;
}
wentry::wentry(string s)
{
mStr = s;
mRef = 1;
}
wentry::wentry(string s, int ref )
{
mStr = s;
mRef = ref;
}
wentry::~wentry()
{
list<wentry *>::iterator iter;
for (iter = w_table.begin(); iter != w_table.end(); iter++ )
{
if ( (*iter) == this )
{
w_table.erase(iter);
break;
}
}
}
inline wentry *wentry::operator++()
{
mRef++;
return this;
};
inline bool wentry::operator<(const wentry &Entry) const
{
return (mRef < Entry.GetRef());
}