2010-11-21 92 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-ite-c-line-by-line-in-c)比完全重複要好)。 – 2010-11-21 17:16:44

回答

5

您可以使用std::getline

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

它會與「\ r \ n」換行符一起使用嗎?該字符串是從Windows上的文本文件加載的。 – 2010-11-21 18:28:20

+0

@Alex:您可以從內存中指定一個分隔符,另外,我相信當以文本模式加載時,MSVC STL自動將「\ r \ n」轉換爲「\ n」。 – Puppy 2010-11-21 18:31:09

+0

感謝您的信息! – 2010-11-21 18:31:48

1

您可以使用boost::tokenizer\n令牌來遍歷行。

+0

是否可以將它打包到一個allLinesOf函數中? – 2010-11-21 17:18:15

+0

在某些情況下可能不是個好主意。看看這裏:http://www.codinghorror.com/blog/2010/01/the-great-newline-schism.html – Aamir 2010-11-21 17:23:32

+0

或BOOST_FOREACH結合boost :: split :) – 2010-11-21 17:34:06

2

嗯,你可以寫性病定製迭代器::字符串,它會遍歷通過換行分隔字符串段,並通過一個std ::對這樣的迭代器來BOOST_FOREACH