#include #include #include #include #include using namespace std; class WordT { public: WordT(string inWord) { word = Strip(inWord); count = 1; } string Word() const { return word; } int Count() const { return count; } bool operator ==(const WordT & other) const { return word == other.word; } bool operator < (const WordT & other) const { if (count == other.count) { return word < other.word; } return count < other.count; } void Combine(const WordT & other) { if (word == other.word) { count += other.count; } } private: string Strip(string word) { int i; string rv; /* for(auto x: word) { if (isalpha(x)) { rv += tolower(x); } } */ for(i =0; i < word.size() ; ++i) { if (isalpha(word[i])) { rv += tolower(word[i]); } } return rv; } string word; int count; }; bool Comp(const WordT & a, const WordT & b) { return a.Word() > b.Word(); } void PrintDict(const vector & dict); int main() { ifstream inFile{"ocap.txt"}; string word; vectordict; vector::iterator i; vector::reverse_iterator j; inFile >> word; while (inFile) { WordT entry(word); i = find(dict.begin(), dict.end(), entry); if (i == dict.end()) { if (entry.Word() != "") { dict.push_back(entry); } } else { i->Combine(entry); } inFile >> word; } sort(dict.begin(), dict.end()); cout << endl << endl; PrintDict(dict); /*for( i = dict.begin(); i != dict.end(); ++i) { cout << i->Word() << " " << i->Count() << endl; } */ /* for( j = dict.rbegin(); j != dict.rend(); ++j) { cout << j->Word() << " " << j->Count() << endl; } */ /* cout << endl << endl; sort(dict.begin(), dict.end(),Comp); cout << endl << endl; for( i = dict.begin(); i != dict.end(); ++i) { cout << i->Word() << " " << i->Count() << endl; } */ return 0; } void PrintDict(const vector & dict){ vector::const_iterator i; for( i = dict.cbegin(); i != dict.cend(); ++i) { cout << i->Word() << " " << i->Count() << endl; } }