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

How to split text (poem) into lines (string/char[]) and finding last word of each one

本文关键字:查找 单词 最后一个 字符串 文本 诗歌 拆分 字符      更新时间:2023-10-16

我有一首诗,比如这个:

    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));
}

但是将文本拆分为行呢?

但是将文本拆分为行呢?

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

string poem = "Roses are redn
Violets are bluen
Sugar is sweetn
And so are you";
stringstream ss(poem);
string line;
while (getline(ss, line)) {
    cout << lastWord(line) << endl;
}

此外,您的lastWord函数有一个逐一错误:您应该简单地将一个添加到 rfind 的结果中,而不是使用 max ,如下所示:

string lastWord(string line)
{
    return line.substr(line.rfind(" ")+1);
}

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

只要

你有换行符,就可以在循环中调用substr

请记住,换行符可能因平台而异,'n' Linux/OSX 和 Windows 上的"rn"

我会使用split函数。另请参阅:http://www.dotnetperls.com/split