C++ 如何将文本(诗歌)拆分为行(字符串/字符[]),并找到每行的最后一个单词

C++ 如何将文本(诗歌)拆分为行(字符串/字符[]),并找到每行的最后一个单词,c++,string,C++,String,我有一首诗,例如: Roses are red Violets are blue Sugar is sweet And so are you 仅与/n分离 我需要得到每一行的最后一句话,因为最后一句话找朋友建议使用: string lastWord(string line) { return line.substr(max(line.rfind(" "), 0)); } 但是把文本分成几行怎么样呢?只要有新行,就在循环中调用substr 请记住,换行符

我有一首诗,例如:

    Roses are red
    Violets are blue
    Sugar is sweet
    And so are you
仅与/n分离 我需要得到每一行的最后一句话,因为最后一句话找朋友建议使用:

string lastWord(string line)
{
    return line.substr(max(line.rfind(" "), 0));
}

但是把文本分成几行怎么样呢?

只要有新行,就在循环中调用
substr

请记住,换行符可能因平台而异,Linux/OSX上的“
”\n“
”和Windows上的“\r\n””

但是把文本分成几行呢

答案取决于文本的初始位置:如果整个文本都在一个文件中,请使用
ifstream
;如果文本位于
字符串中
,请使用
stringstream
。在这两种情况下,请在循环中逐个从文本中提取行:

string poem = "Roses are red\n\
Violets are blue\n\
Sugar is sweet\n\
And so are you";
stringstream ss(poem);
string line;
while (getline(ss, line)) {
    cout << lastWord(line) << endl;
}

这将从返回的单词中删除初始空格。

我将使用
split
函数。另请参见:

这就是为什么您通常以文本模式读取文本文件-以便为您处理换行符。
while(std::getline(ss,line)){…}
?这是讽刺吗?对于你的代表,我有点惊讶你没有发布它。如果没有,我很乐意帮忙!(和1)@ HMJD不,这不是讽刺:我已经走出了C++编码10年,所以我忘记了一些技巧在这里和那里。
string lastWord(string line)
{
    return line.substr(line.rfind(" ")+1);
}