首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++如何将单词组合限制为2到3个单词?

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

Stack Overflow用户
提问于 2016-05-18 11:44:09
回答 2查看 68关注 0票数 1

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

这是我目前的代码:

代码语言:javascript
运行
复制
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;
}

例如:

输入文件文本:“游戏玩人工智能的下一个前沿”。

其目标是输出文字,如下所示:

这个

下一个

下一个边疆

下一首

下一边疆

下一个边疆

边疆

边疆

游戏的前沿

..。

等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-18 11:51:31

嗯,“级联”循环会在所有单词上运行一次,所以这就是你得到所有单词的原因。

按照您描述想要的输出的方式,您似乎需要两个循环,它们相互嵌套,内部循环从一个循环到n个循环,其中n是外部循环的当前值。

也许就像

代码语言:javascript
运行
复制
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为0和1),以构造短语"The next "

当然,这并不能完全做到你想做的事情,一次只打印三个单词,在打印前三个单词之后,从下一个单词开始。您可能还需要另一个循环来处理1到3的计数。以上是一个起点,我建议您尝试一下,以及外部的其他循环,中间的循环,以及一个新的内循环。实验和失败是你学习的方式。

票数 1
EN

Stack Overflow用户

发布于 2016-05-18 11:55:30

就像这样(我没有运行它):

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37298620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档