多个单词的计数单词出现的问题

Issue with counting word occurrence for multiple words

本文关键字:单词出 问题 单词      更新时间:2023-10-16

我遇到的问题是我不确定如何重置我的单词计数。我创建了一个单词搜索,但是当我计算出10个不同单词的出现数量时,它与它所计数的第一个单词相同。我相信我遇到的问题是使用for循环

输出

boy appeared 3 times
Snape appeared 3 times
Dumbledore appeared 3 times
he appeared 3 times
her appeared 3 times
the appeared 3 times
it appeared 3 times
is appeared 3 times
will appeared 3 times
all appeared 3 times

它应该看起来像

boy appeared 3 times
Snape appeared 7 times
Dumbledore appeared 4 times
he appeared 27 times
her appeared 4 times
the appeared 13 times
it appeared 6 times
is appeared 12 times
will appeared 2 times
all appeared 3 times

通过阅读我的代码,我敢肯定,我使它比以前更复杂。我将感谢我提出的任何建议和更正。

完整代码

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
// Main Function
int main()
{
    // Declaration
    std::string list, passage, word[10];
    std::ifstream listFile("WordList.txt", std::ios::in);
    std::ifstream passageFile("HarryPotterPassage.txt", std::ios::in);
    std::vector<std::string> vec_wordList, vec_passage;

    /* Read a file that contains a list of 10 words */
    if (listFile.is_open())
    {
        // Store text file in a vector
        while (listFile)
        {
            listFile >> list;
            vec_wordList.push_back(list);
        }
        // Assign vector to individual strings
        for (int i = 0; i < 10; i++)
        {
            word[i] = vec_wordList[i];
        }
        // Close file
        listFile.close();
    }
    else
        std::cout << "No file found.n";

    /* Read another file containing a paragraph */
    if (passageFile.is_open())
    {
        while (passageFile)
        {
            // Store text file in a string
            std::getline(passageFile, passage);
        }
        // Close file
        passageFile.close();
    }
    else
        std::cout << "No file found.n";
    //std::cout << passage << 'n';

    /* Count the number of words from the first file
       from the second file that contains the paragraph */
    size_t count = 0;
    std::string::size_type pos = 0;
    for (int i = 0; i < 10; i++)
    {
        while ((pos = passage.find(word[i], pos)) != std::string::npos)
        {
            count++;
            pos += word[i].size();
        }
        std::cout << word[i] << " appeared " << count << " many timesn";
    }
    system("pause");
    return 0;
}

预先感谢。

您使用word [9]而不是单词[i],因此您可以获得最后一个单词的结果,而不是每个单词的结果。尝试:

for (int i = 0; i < 10; i++)
{
    while ((pos = passage.find(word[i], pos)) != std::string::npos)
    {
        count++;
        pos += word[i].size();
    }
    std::cout << word[i] << " appeared " << count << " many timesn";
}

您需要在外部循环的每次迭代开始时重置countpos

换句话说,更改以下方式:

size_t count = 0;
std::string::size_type pos = 0;
for (int i = 0; i < 10; i++)
{
    ...
}

for (int i = 0; i < 10; i++)
{
    size_t count = 0;
    std::string::size_type pos = 0;
    ...
}

顺便说一句,我还将10更改为sizeof(word)/sizeof(*word)