我在std::string对象中有一个文本。正文由几行组成。我想使用STL (或Boost)逐行迭代文本。我想出的所有解决方案似乎都很不优雅。我最好的方法是在换行处拆分文本。有没有更优雅的解决方案?
更新:这就是我要找的:
std::string input;
// get input ...
std::istringstream stream(input);
std::string line;
while (std::getline(stream, line)) {
std::cout << line << std::endl;
}
发布于 2010-11-16 21:36:20
为什么要将文本保存在源文件中?将其保存在单独的文本文件中。使用std::ifstream打开它,并使用while(getline(...))
迭代它
#include <iostream>
#include <fstream>
int main()
{
std::ifstream fin("MyText.txt");
std::string file_line;
while(std::getline(fin, file_line))
{
//current line of text is in file_line, not including the \n
}
}
或者,如果文本必须在std::string
变量中,则以类似的方式使用std::istringstream
逐行读取
如果您的问题是如何在不使用+的情况下按词法将文本放入您的代码中,请注意,相邻的字符串文字在编译之前是连接在一起的,因此您可以这样做:
std::string text =
"Line 1 contents\n"
"Line 2 contents\n"
"Line 3 contents\n";
发布于 2010-11-16 21:42:00
std::string text("foo\n\nbar\nbaz");
typedef boost::tokenizer<boost::char_separator<char> > line_tokenizer;
line_tokenizer tok(text, boost::char_separator<char>("\n\r"));
for (line_tokenizer::const_iterator i = tok.begin(), end = tok.end();
i != end ; ++i)
std::cout << *i << std::endl;
打印
foo
bar
baz
请注意,它会跳过空行,这可能是您想要的,也可能不是。
发布于 2010-11-16 21:34:40
如果你想要循环line by line
,就像你说的,为什么在换行处拆分文本不是你想要的?
你没有发布代码来说明你是如何做的,但你的方法似乎正确地实现了你所说的你想要的东西。为什么会有自卑的感觉呢?
https://stackoverflow.com/questions/4194626
复制相似问题