Как исправить положение текста на выходе C ++, STL - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно напечатать исходный текст в DisplayOriginalText() после нахождения KnownWords и UnknownWords. Все работает отлично, но в моем выводе есть небольшая ошибка. Компилятор помещает последнее слово исходного текста в первое слово OriginalText. Я приведу пример в выводе, чтобы сделать его более понятным. Может кто-нибудь выяснить в чем проблема и как это исправить?

Мой вывод:

expensive this is my car and this is so much

Требуемый вывод:

this is my car and this car is so much expensive

Примечание: это всего лишь пример. Оригинальный текст статьи составляет около 500 слов.

Заголовочный файл:

typedef map<string, vector<int> > WordMap;
typedef WordMap::iterator WordMapIter;

class WordStats
{
public:
    WordStats();
    void ReadDictionary();
    void DisplayDictionary();
    void ReadTxtFile();
    void DisplayKnownWordStats();
    void DisplayUnknownWordStats();
    void DisplayMostFreqKnownWords();
    void DisplayMostFreqUnknownWords();
    void DisplayOriginalText();
private:
    WordMap KnownWords;
    WordMap UnknownWords;
    set<string> Allwords;
    WordMapIter Paragraph;
    set<string> Dictionary;
    char Filename[256];

    //add your private fns here
    string parse_word(string word);
    void DisplayWordStats(WordMap &WMap);

};

Моя программа:

void WordStats::DisplayOriginalText(){
    std::map<int,string> txt_map;
    std::map<int,string>::iterator mit;

    /// insert all known words
    for (WordMapIter it = KnownWords.begin(); it != KnownWords.end(); it++)
    for (vector<int>::iterator pos_it = it->second.begin(); pos_it != it- 
    >second.end(); pos_it++ )
        txt_map.insert(std::pair<int,string>(*pos_it, it->first) );


    /// insert all unknown words
    for (WordMapIter it = UnknownWords.begin(); it != UnknownWords.end(); 
    it++)
    for (vector<int>::iterator pos_it = it->second.begin(); pos_it != it- 
    >second.end(); pos_it++ )
        txt_map.insert(std::pair<int,string>(*pos_it, it->first) );

    cout << endl << "       - Original Text -" << endl << endl;

    for (mit = txt_map.begin(); mit != txt_map.end(); ++mit) 
    cout << mit->second << " ";

    cout << endl;   
}   

1 Ответ

0 голосов
/ 07 августа 2018
void WordStats::DisplayOriginalText(){
std::map<int,string> mtext;
std::map<int,string>::iterator miter;
vector<int>::iterator v_iter;

// inserting known words
for (Paragraph = KnownWords.begin(); Paragraph != KnownWords.end(); Paragraph++)
{
    for ( v_iter = Paragraph->second.begin(); v_iter != Paragraph->second.end(); v_iter++ )
    {
        mtext.insert(std::pair<int,string>(*v_iter, Paragraph->first) );
    }
}
/// inserting unknown words
for (Paragraph = UnknownWords.begin(); Paragraph != UnknownWords.end(); Paragraph++)
{
    for ( v_iter = Paragraph->second.begin(); v_iter != Paragraph->second.end(); v_iter++ )
    {
        mtext.insert(std::pair<int,string>(*v_iter, Paragraph->first) );
    }
}
cout <<"\n         ";
cout << "--- Original Text ---\n\n";

for (miter = mtext.begin(); miter != mtext.end(); ++miter) 
{
    cout << miter->second << " ";
}   
cout << endl;   
}
...