我正在尝试计算文本文件中特定单词的出现次数,问题是当我的代码正在读取文件时 - 它正在用白色空格分隔符读取它,但我想要计算的一些单词是“从“
出来的2个单词”例如“除此之外还有第二个问题,那就是像“不是”和“不要”这样的词 - 我的代码似乎忽略了这个词,即使我在地图中加上反斜杠 - 我的猜测是因为某种原因从文件中读取它时会被忽略
我正在寻找的最终结果是我要搜索的单词的频率。
std::list<std::string> Fwords = {
"a","abroad","as far as","ahead of"};
// Begin reading from file:
std::ifstream fileStream(fileName);
// Check if we've opened the file (as we should have).
if (fileStream.is_open())
while (fileStream.good())
{
// Store the next word in the file in a local variable.
std::string word;
fileStream >> word;
std::cout << "This is the word: " << word << endl;
if (std::find(std::begin(Fwords), std::end(Fwords), word) != std::end(Fwords))
wordsCount[word]++;
}
输入:
"ahead of me as far as abroad me"
这将是预期的输出:
abroad:1
ahead of:1
as far as:1
答案 0 :(得分:0)
这种方法不起作用。您的问题是,您一直在从文件中读取一个单词。没有任何反斜杠或操纵单词列表/地图将会解决这个问题。
但你怎么知道要读多少字呢?你没有 - 它必须是试验和错误。
考虑到您的编程水平,“暴力破解”的一种方法是将else
案例添加到
if (std::find(std::begin(Fwords), std::end(Fwords), word) != std::end(Fwords))
{
// ...
}
使用文件中的单词检查地图中开始的单词,例如“as,”但是有空格,所以搜索是为了as
。如果找到一个或多个匹配项,那么是时候从文件中读取另一个单词,例如“到目前为止。”这应该放在一个循环(或循环中调用的函数)中,以便搜索as far
并读取另一个单词“as”自动发生。成功找到as far as
后,您就完成了。如果您的地图中没有这些内容,那么您也无法找到as
,as far
或as far as
,即,在这种情况下,你想在每个单词中运行for
循环,以检查它们是否是单词,如果是,则增加它们的计数。在这项工作中,您将意识到您需要与原始代码相同的代码;因此,将它分解为一个函数也是明智的。