首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++:如何使用STL逐行迭代std::string中的文本?

C++:如何使用STL逐行迭代std::string中的文本?
EN

Stack Overflow用户
提问于 2010-11-16 21:32:01
回答 3查看 15.3K关注 0票数 18

我在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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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";
票数 18
EN

Stack Overflow用户

发布于 2010-11-16 21:42:00

使用Boost.Tokenizer

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

请注意,它会跳过空行,这可能是您想要的,也可能不是。

票数 9
EN

Stack Overflow用户

发布于 2010-11-16 21:34:40

如果你想要循环line by line,就像你说的,为什么在换行处拆分文本不是你想要的?

你没有发布代码来说明你是如何做的,但你的方法似乎正确地实现了你所说的你想要的东西。为什么会有自卑的感觉呢?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4194626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档