迭代字符串中的行吗?

迭代字符串中的行吗?

问题描述:

我试图做这样的事情:迭代字符串中的行吗?

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

您可以使用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

您可以使用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

嗯,你可以写性病定制迭代器::字符串,它会遍历通过换行分隔字符串段,并通过一个std ::对这样的迭代器来BOOST_FOREACH