c++ - 如何将文本(诗歌)分成几行(字符串/字符[])并找到每一行的最后一个词

标签 c++ string

我有一首诗,例如:

    Roses are red
    Violets are blue
    Sugar is sweet
    And so are you

只用/n 分隔 我需要得到每一行的最后一个词,最后一个词找到一个 friend 建议使用这个:

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

但是如何将文本拆分成行呢?

最佳答案

But what about splitting text into lines?

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

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

此外,您的 lastWord 函数有一个差一错误:您应该简单地将 1 添加到 rfind 的结果,而不是使用 max,像这样:

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

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

关于c++ - 如何将文本(诗歌)分成几行(字符串/字符[])并找到每一行的最后一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585544/

相关文章:

c++ - CMutex::Lock 与 CSingleLock::Lock

c++ - 如何将 std::unique_ptr<> 从一个 STL 容器移动到另一个?

mysql - 从 mysql 操作打印五个字符串

c - 如何在C中将一个字符串拆分为2个字符串

C# - 使用另一个字符串数组中的字符串搜索字符串数组

c++ - C++ 或 Visual Studio 2010 的问题

c++ - 如何在 Cython 中包装来自 C++ 的 std::shared_ptr 和 std::vector ?

c++ - MFC 多线程 : AfxBeginThread vs Boost. 线程?

ios - AVAudioPlayer无法播放声音

c - Valgrind "Invalide write of size 1"