Мне нужно напечатать исходный текст в 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;
}