1

私は C++ の本と、豚のラテン語翻訳者を作成するための演習の 1 つを読んでいます。1 つの単語を翻訳するために必要な手順をすべて把握しました。現在、複数単語の文字列を処理する関数を作成するのに苦労しています。

基本的に、文字列の各単語を繰り返し処理し、各単語に対してアクションを実行するための標準的なイディオムのようなものについて助けが必要です。

私がこれまで持っていた機能はせいぜいずさんなもので、私は立ち往生しています。

string sentenceToPigLatin(string str) {
    string result = "";
    for (int i = 0; i < str.length(); i++) {
        char ch = str.at(i);
        if (ch == ' ') {
            result += toPigLatin(str.substr(0, i));
            str = str.substr(i);
        }
    }
    return result;
}

toPigLatin() は、空白を含まない単語に対して正しい手順を実行すると想定できます。

4

1 に答える 1

4

文字列全体を文字列ストリームに入れ、抽出演算子を使用して単一の単語を取得できます。

#include <sstream>  // for stringstreams

string sentenceToPigLatin(const string& str)
{ 
    istringstream stream(str);
    ostringstream result;
    string temp;
    while (stream >> temp)
            result << toPigLatin(temp) << ' ';
    return result.str();
}

もう 1 つの方法は、標準アルゴリズムをストリーム iteratorと一緒に使用することです。

#include <algorithm> // for transform
#include <iterator>  // for istream_iterator and ostream_iterator

string sentenceToPigLatin(const string& str)
{ 
    istringstream stream(str);
    ostringstream result;
    transform(istream_iterator<string>(stream),
              istream_iterator<string>(),
              ostream_iterator<string>(result, " "),
              toPigLatin);
    return result.str();
}
于 2012-08-26T16:56:25.673 に答える