我試圖做這樣的事情:迭代字符串中的行嗎?
BOOST_FOREACH (const std::string& line, allLinesOf(someFileLoadedIntoString))
{
...
}
我不知道如何實現allLinesOf功能?謝謝!
更新:感謝您的答案。對不起,但我忘了提及一個重要的細節:在我的情況下,換行符是\ r \ n。
我試圖做這樣的事情:迭代字符串中的行嗎?
BOOST_FOREACH (const std::string& line, allLinesOf(someFileLoadedIntoString))
{
...
}
我不知道如何實現allLinesOf功能?謝謝!
更新:感謝您的答案。對不起,但我忘了提及一個重要的細節:在我的情況下,換行符是\ r \ n。
您可以使用std::getline。
std::string line;
while(std::getline(file, line)) {
// Ohai!
}
它會與「\ r \ n」換行符一起使用嗎?該字符串是從Windows上的文本文件加載的。 – 2010-11-21 18:28:20
@Alex:您可以從內存中指定一個分隔符,另外,我相信當以文本模式加載時,MSVC STL自動將「\ r \ n」轉換爲「\ n」。 – Puppy 2010-11-21 18:31:09
感謝您的信息! – 2010-11-21 18:31:48
您可以使用boost::tokenizer和\n
令牌來遍歷行。
是否可以將它打包到一個allLinesOf函數中? – 2010-11-21 17:18:15
在某些情況下可能不是個好主意。看看這裏:http://www.codinghorror.com/blog/2010/01/the-great-newline-schism.html – Aamir 2010-11-21 17:23:32
或BOOST_FOREACH結合boost :: split :) – 2010-11-21 17:34:06
嗯,你可以寫性病定製迭代器::字符串,它會遍歷通過換行分隔字符串段,並通過一個std ::對這樣的迭代器來BOOST_FOREACH
的重複[是否有一個C++迭代器,可以遍歷由線一個文件中的行?](http://stackoverflow.com/questions/2291802/is-there-ac-iterator-that-can- (但是,Jerry的答案是[我如何在C++中逐行迭代'cin'?](http://stackoverflow.com/questions/1567082/how -do-i-ite-c-line-by-line-in-c)比完全重複要好)。 – 2010-11-21 17:16:44