C++如何将单词组合限制为2到3个单词

C++ How can I restrict the combinations of words to make a phrase to 2 to 3 words?

本文关键字:单词 3个 组合 C++      更新时间:2023-10-16

我目前正在尝试制作一个函数,该函数可以从文本文件中读取一个短语,该短语由2到3个相邻单词组成。目前,我的函数会这样做,但它最终会连接起来形成整篇文章,而不是每个短语只有2到3个单词。

这是我当前的代码:

int Dictionary::processFilePhrases(string file) {
    vector<string> wordList;
    string word;
    string phrase;
    ifstream fin;
    fin.open(file.c_str());
    while (fin >> word) {
        wordList.push_back(word);
    }
    fin.close();
    for (int i=0; i<wordList.size(); i++){
        phrase +=  wordList[i] + " ";
        cout << phrase << endl;
    }
    return wordCount;
}

例如:

输入文件文本:"游戏人工智能的下一个前沿"

目标是输出类似的单词:

下一个

下一个前沿

下一个

下一个前沿

的下一个前沿

边界

的边界

游戏边界

等等。

好吧,"串联"循环在你得到的所有单词上运行一次,所以这就是你得到所有单词的原因。

描述所需输出的方式,似乎需要两个循环,嵌套在彼此内部,其中内部循环从1到n,其中n是外部循环的当前值。

也许类似

for (unsigned i = 0; i < wordList.size(); ++i)
{
    std::string phrase;
    for (unsigned j = 0; j <= i; ++j)
    {
        phrase += wordList[j];
        phrase += ' ';  // Spacing between words
    }
    std::cout << phrase << 'n';
}

如果我们现在遍历上面的代码,在外循环的第一次迭代中,i等于零。在内部循环中,当j小于或等于i(现在为零)时,我们循环,这意味着内部循环将只迭代一次,使phrase等于字符串"The "(使用您在问题中给出的输入)。

一旦内循环完成,短语就被打印出来,外循环迭代,这使得i等于1。内部循环现在迭代两次(对于j为零和一)来构建短语"The next "


当然,这并不是完全可以随心所欲,一次最多只打印三个单词,并在打印完前三个单词后从下一个单词开始。您可能还需要另一个循环来处理一对三计数。不过,以上是一个起点,我建议您尝试一下,以及外部、中间和作为新内部循环的其他循环。实验和失败是你学习的方式。

类似的东西(我没有运行它):

int Dictionary::processFilePhrases(string file) {
    vector<string> wordList;
    string word;
    ifstream fin;
    fin.open(file.c_str());
    while (fin >> word) {
        wordList.push_back(word);
    }
    fin.close();
    for (int i=0; i<wordList.size(); i++){
        string phrase;
        for (int j = i; j < i + 3 && j < wordList.size(); ++j) {
            phrase += wordList[j] + " ";
            cout << phrase << endl;
        }
        cout << phrase << endl;
    }
    return wordCount;
}