2010-11-21 7 views
1

私はこのような何かをしようとしています:文字列内の線を反復する?

BOOST_FOREACH (const std::string& line, allLinesOf(someFileLoadedIntoString)) 
{ 
    ... 
} 

私はallLinesOf機能を実装する方法だろうか?ありがとう!

更新:お返事ありがとうございます。申し訳ありませんが、私は重要な細部について言及することを忘れました。私の場合、改行は\ r \ nです。

+0

の重複[ラインでファイルの行を反復処理することができますC++のイテレータはありますか?](http://stackoverflow.com/questions/2291802/is-there-ac-iterator-that-c​​an- (しかし、ファイルごとに反復処理する)(Jerryの答えは、「C++で 'cin '行をどのように繰り返し処理するのですか?」(http://stackoverflow.com/questions/1567082/how -do-i-iterate-over-cin-line-by-line-in-c)は、その正確な複製よりも優れています。 –

答えて

5

あなたはstd::getlineを使用することができますBOOST_FOREACHに渡す文字列を書き込むことができます。

std::string line; 
while(std::getline(file, line)) { 
    // Ohai! 
} 
+0

"\ r \ n"改行で動作しますか?文字列は、Windowsのテキストファイルから読み込まれます。 –

+0

@Alex:メモリからセパレータを指定することができます。また、テキストモードでロードするときに、MSVC STLは自動的に "\ r \ n"を "\ n"に変換します。 – Puppy

+0

情報ありがとう! –

1

boost::tokenizer\nトークンを使用して行間を反復することができます。

+0

これを1つのallLinesOf関数にパックすることは可能でしょうか? –

+0

場合によっては良い考えではないかもしれません。ここを見てください:http://www.codinghorror.com/blog/2010/01/the-great-newline-schism.html – Aamir

+0

またはboost :: splitと組み合わせてBOOST_FOREACH: –

2

あの、あなたはSTDのカスタムイテレータ::改行で区切られた文字列のセグメントを反復処理して、そのようなイテレータのはstd ::ペアが

関連する問題