C ++计数功能词出现

时间:2016-07-19 17:48:48

标签: c++ string text

我正在尝试计算文本文件中特定单词的出现次数,问题是当我的代码正在读取文件时 - 它正在用白色空格分隔符读取它,但我想要计算的一些单词是“从“

出来的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

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循环,以检查它们是否是单词,如果是,则增加它们的计数。在这项工作中,您将意识到您需要与原始代码相同的代码;因此,将它分解为一个函数也是明智的。