C++ で複数行の文字列を宣言

胡金庫 2023年10月12日
  1. C++ で複数行の文字列を宣言するには std::string クラスを使用する
  2. 複数行の文字列リテラルを宣言するために const char * 記法を使用する
  3. バックラッシュ文字を用いた const char * 記法を用いる複数行の文字列リテラルを宣言する
C++ で複数行の文字列を宣言

この記事では、C++ で複数行の文字列を宣言する方法をいくつか説明します。

C++ で複数行の文字列を宣言するには std::string クラスを使用する

オブジェクト std::string は文字列の値で初期化することができます。この場合、文字列変数 s1main 関数のローカル変数として宣言します。C++ では、複数の二重引用符で囲まれた文字列リテラルを文の中で自動的に連結することができます。その結果、string 変数を初期化する間に任意の行数を含めることができ、コードをより一貫して読みやすくすることができます。

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  string s1 =
      "This string will be printed as the"
      " one. You can include as many lines"
      "as you wish. They will be concatenated";

  copy(s1.begin(), s1.end(), std::ostream_iterator<char>(cout, ""));
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

This string will be printed as the one. You can include as many linesas you wish. They will be concatenated

複数行の文字列リテラルを宣言するために const char * 記法を使用する

しかし、ほとんどの状況では、const 修飾子で読み取り専用の文字列リテラルを宣言する方がより実用的かもしれません。これは比較的長いテキストがコンソールに出力され、これらのテキストはほとんどが静的で時間の経過とともにほとんど変化がない場合に最も実用的です。なお、const 修飾子の文字列は copy アルゴリズムの引数として渡す前に std::string オブジェクトに変換する必要があります。

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  const char *s2 =
      "This string will be printed as the"
      " one. You can include as many lines"
      "as you wish. They will be concatenated";

  string s1(s2);

  copy(s1.begin(), s1.end(), std::ostream_iterator<char>(cout, ""));
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

This string will be printed as the one. You can include as many linesas you wish. They will be concatenated

バックラッシュ文字を用いた const char * 記法を用いる複数行の文字列リテラルを宣言する

あるいは、複数行の文字列リテラルを構築し、const 修飾された char ポインタにそれを代入するために、バックスラッシュ文字\を利用することもできます。手短に言えば、バックスラッシュ文字は各改行の最後に含める必要があります。つまり、文字列は次の行に続きます。

しかし、タブやスペースのような見えない文字が出力に含まれてしまうので、スペーシングの処理はよりエラーになりやすいことに注意してください。一方で、いくつかのパターンをより簡単にコンソールに表示するためにこの機能を利用することもできます。

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  const char *s3 =
      "          This string will\n\
        printed as the pyramid\n\
    as one single string literal form\n";

  cout << s1 << endl;

  printf("%s\n", s3);

  return EXIT_SUCCESS;
}

出力:

          This string will
        printed as the pyramid
    as one single string literal form
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ String