Как напечатать текст с помощью контейнера карты - PullRequest
0 голосов
/ 09 мая 2018

Понятия не имею, как написать эту функцию “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;
}
...