C++: STL で std::string 内のテキストを 1 行ずつ反復処理するにはどうすればよいでしょうか? 質問する

C++: STL で std::string 内のテキストを 1 行ずつ反復処理するにはどうすればよいでしょうか? 質問する

std::string オブジェクトにテキストがあります。テキストは複数の行で構成されています。STL (または Boost) を使用して、テキストを 1 行ずつ繰り返し処理したいと考えています。思いついた解決策はどれも、エレガントとはほど遠いようです。私の最善のアプローチは、改行でテキストを分割することです。もっとエレガントな解決策はありますか?

更新: 私が探していたのはこれです:

std::string input;
// get input ...
std::istringstream stream(input);
std::string line;
while (std::getline(stream, line)) {
  std::cout << line << std::endl;
}

ベストアンサー1

なぜソースファイルにテキストを保存するのでしょうか?別のテキストファイルに保存してください。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";

おすすめ記事