1

たとえば、次のような詩があります。

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

しかし、テキストを行に分割する場合はどうでしょうか?

4

3 に答える 3

3

しかし、テキストを行に分割する場合はどうでしょうか?

答えは、テキストが最初にどこにあるかによって異なります。テキスト全体がファイル内にある場合は、ifstream;を使用します。テキストが にある場合はstring、 を使用しますstringstream。どちらの場合も、getlineループ内で使用して、テキストから行を 1 つずつ抽出します。

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関数にはオフバイワン エラーがあります。次のように、rfindを使用するのではなく、単に の結果に 1 を追加する必要があります。max

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

これにより、返される単語から最初のスペースが削除されます。

于 2012-11-27T13:47:12.017 に答える
0

関数を使用しsplitます。参照: http://www.dotnetperls.com/split

于 2012-11-27T13:49:21.567 に答える
0

substr改行がある限り、ループで呼び出します。

また、改行は、プラットフォーム、'\n'Linux/OSX、および"\r\n"Windows によって異なる可能性があることに注意してください。

于 2012-11-27T13:46:23.733 に答える