Понятия не имею, как написать эту функцию “DisplayOriginalText()”
.Мое требование: я должен реализовать функцию “DisplayOriginalText()”
public member.Чтобы сделать это, объявите локальный контейнер map<int,string>;
и сделайте то же самое, что я сделал с DisplayMostFreqKnownWords()
, за исключением того, что я должен также перебрать векторы в контейнерах KnownWords и UnknownWords и добавить пару для всех слов и их позиций.Это позволит отсортировать слова в их исходном порядке текста на основе номеров позиций слова.На выходе будет исходный текст как в файле.
Заголовочный файл:
typedef map<string, vector<int> > WordMap;
typedef WordMap::iterator WordMapIter;
class WordStats
{
public:
void DisplayMostFreqKnownWords();
void DisplayMostFreqUnknownWords();
void DisplayOriginalText();
private:
WordMap KnownWords;
WordMap UnknownWords;
WordMapIter Paragraph;
set<string> Dictionary;
char Filename[256];
};
Моя программа:
void WordStats::DisplayMostFreqKnownWords(){
int count;
multimap<int,string > displayFreqWords;
multimap<int,string >::reverse_iterator rit = displayFreqWords.rbegin();
for (Paragraph = KnownWords.begin(); Paragraph != KnownWords.end();
++Paragraph){
string word = (*Paragraph).first;
int cnt = (*Paragraph).second.size();
displayFreqWords.insert(pair<int,string>(cnt,word))
}
cout <<" Word Count\n";
for(; count<=10 && rit!=displayFreqWords.rend(); rit++, ++count){
string word = (*rit).second;
int cnt = (*rit).first;
cout << setw(15) << word << setw(10) << cnt << endl;
}
}
// Displays 10 most frequent words in UnknownWords
void WordStats::DisplayMostFreqUnknownWords(){
multimap<int,string > displayFreqUnknownWords;
multimap<int,string >::reverse_iterator rrit =
displayFreqUnknownWords.rbegin();
for (Paragraph = UnknownWords.begin(); Paragraph != UnknownWords.end();
++Paragraph){
string word = (*Paragraph).first;
int cnt = (*Paragraph).second.size();
displayFreqUnknownWords.insert(pair<int,string>(cnt,word));
}
cout <<" Word Count\n";
for(int count=0; count<10 && rrit!=displayFreqUnknownWords.rend();
rrit++, ++count){
string wrd = (*rrit).second;
int ccnt = (*rrit).first;
cout << setw(15) << wrd << setw(10) << ccnt << endl;
}
}
// Displays original text from KnownWords & UnknownWords
void WordStats::DisplayOriginalText(){
map<int,string> DisplayOriginalText;
map<int,string> ::iterator it;
for(int count=0; count<10 && it!=displayFreqUnknownWords.rend(); it++,
++count){
string wrd = (*it).second;
int ccnt = (*it).first;
cout << setw(15) << wrd << setw(10) << ccnt << endl;
}