我目前正在尝试建立一个函数,它可以从文本文件中读取一个短语,该短语由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;
}例如:
输入文件文本:“游戏玩人工智能的下一个前沿”。
其目标是输出文字,如下所示:
这个
下一个
下一个边疆
下一首
下一边疆
下一个边疆
边疆
边疆
游戏的前沿
..。
等。
发布于 2016-05-18 11:51:31
嗯,“级联”循环会在所有单词上运行一次,所以这就是你得到所有单词的原因。
按照您描述想要的输出的方式,您似乎需要两个循环,它们相互嵌套,内部循环从一个循环到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为0和1),以构造短语"The next "。
当然,这并不能完全做到你想做的事情,一次只打印三个单词,在打印前三个单词之后,从下一个单词开始。您可能还需要另一个循环来处理1到3的计数。以上是一个起点,我建议您尝试一下,以及外部的其他循环,中间的循环,以及一个新的内循环。实验和失败是你学习的方式。
发布于 2016-05-18 11:55:30
就像这样(我没有运行它):
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;
}https://stackoverflow.com/questions/37298620
复制相似问题