作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试制作一个可以从文本文件中读取短语的函数,该短语包括组合 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 "
。
当然,这并不是完全您想要的,一次最多只打印三个单词,并在打印前三个单词后从下一个单词开始。您可能还需要另一个 循环来处理一到三的计数。不过,以上只是一个起点,我建议您试验一下,以及外部循环之外的其他循环、中间循环以及作为新内部循环的循环。实验和失败是您学习的方式。
关于C++ 如何将单词组合限制为 2 到 3 个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37298620/
我是一名优秀的程序员,十分优秀!