如何使用向量 c++ 迭代文件中单词的位置
How to iterate position of the words in a file using vectors c++
我必须阅读dictionary.txt
和test.txt
。然后,必须检查test.txt
中的每个单词,如果它相等,那么这个单词将被添加到KnownWords
容器中,其余的将添加到UnknownWords
容器中。到目前为止,我已经做了所有事情。但是,在功能DisplayKnownWordStats()
中,我还必须显示单词的位置。我尝试了以下代码,但它没有给我正确的仓位值。
有人可以帮我从test.txt
那里获得KnownWords
的正确位置.
void WordStats::ReadTxtFile()
{
std::ifstream ifile(Filename);
if (!ifile)
{
std::cerr << "Error Opening file " << Filename << std::endl;
exit(1);
}
for (std::string word; ifile >> word; )
{
transform(word.begin(), word.end(), word.begin(), ::tolower);
WordMap & Words = (Dictionary.count(word) ? KnownWords : UnknownWords);
Words[word].push_back(ifile.tellg());
}
std::cout << KnownWords.size() << " known words read." << std::endl;
std::cout << UnknownWords.size() << " unknown words read." << std::endl;
}
// Displays stats of words in KnownWords
void WordStats::DisplayKnownWordStats()
{
cout << " ";
cout << " Word Count Position(s)n";
for (Paragraph = KnownWords.begin(); Paragraph != KnownWords.end(); ++Paragraph)
{
string word = (*Paragraph).first;
vector<int> vect = (*Paragraph).second;
int cnt = vect.size();
cout << setw(15) << word << setw(10) << cnt << " ";
for (int i = 0; i<cnt; i++)
cout << vect[i] << ' '; // something wrong with this code
cout << endl;
}
}
void WordStats::ReadTxtFile(){
int pos=-1;
string word;
std::ifstream ifile(Filename);
if(!ifile)
{
std::cerr << "Error Opening file " << Filename << std::endl;
exit(1);
}
for (std::string word; ifile >> word; )
{
transform (word.begin(), word.end(), word.begin(), ::tolower);
word.erase(std::remove_if(word.begin(), word.end(), [](char c)
{
return (c < 'a' || c > 'z') && c != ''' ;
}), word.end());
if (word == "") continue;
pos++;
if (Dictionary.find(word) != Dictionary.end())
{
Paragraph = KnownWords.find(word); //adding word to the knownWords
if (Paragraph != KnownWords.end())
{
Paragraph->second.push_back(pos); //adding position of the word
}
else
{
KnownWords[word] = vector<int>(1, pos); //adding record which is new
}
}
else
{
Paragraph = UnknownWords.find(word); //adding word to the knownWords
if (Paragraph != UnknownWords.end())
{
Paragraph->second.push_back(pos); //adding position of the word
}
else
{
UnknownWords[word] = vector<int>(1, pos); //adding record which is new
}
}
}
cout << KnownWords.size() << " known words read." << endl;
cout << UnknownWords.size() << " unknown words read." << endl;
}
void WordStats::DisplayKnownWordsStats()
{
vector<int>::iterator v;
cout << "n";
cout << setw(22) << "Word" << setw(12) << "Count" << setw(20) << "Position(s)" << endl;
for (Paragraph = KnownWords.begin(); Paragraph != KnownWords.end(); Paragraph++)
{
string word = (*Paragraph).first;
vector<int> vect = (*Paragraph).second;
int count = vect.size();
cout << setw(22) << word << setw(9) << count ;
cout << " ";
for ( v = vect.begin(); v < vect.end(); v++)
{
cout << *v << " ";
}
cout << endl;
}
cout << "n";
}
Words[word].push_back(ifile.tellg());
上面ifile.tellg()
返回一个单词后的位置。例如,如果文件包含单词"word",则从文件中读取第一个单词,然后ifile.tellg()
返回 4。似乎您希望那里的位置为 0。你应该像下面那样做:
Words[word].push_back(ifile.tellg() - word.size());
相关文章:
- 文本文件中的单词链表
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 在指针的帮助下,文本文件中单词的频率
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何根据单词在文本中出现的概率输出单词
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 替换字符串位置 X 中的单词C++
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何使用向量 c++ 迭代文件中单词的位置
- 如何在任何位置阅读和替换C++单词
- C++ 将文本文件中不同行/位置的相同单词与每行中的相同位置对齐
- 通过在每个位置从特定位置的单词池中选择单词,有效地生成所有序列
- 如何逐字阅读文件并找到每个单词的位置
- 突出显示qtextedit中x和y作为位置的单词
- 从字符串中获取一个单词,对其进行更改,然后将其放回正确的位置