Mehrzeilige Zeichenkette in C++ deklarieren

Jinku Hu 12 Oktober 2023
  1. Verwendung der Klasse std::string zur Deklaration eines mehrzeiligen Strings in C++
  2. Verwendung der const char * Notation zur Deklaration von mehrzeiligen String-Literalen
  3. Verwendung der const char * Notation mit Backlash-Zeichen Mehrzeiliges String-Literal deklarieren
Mehrzeilige Zeichenkette in C++ deklarieren

In diesem Artikel werden verschiedene Methoden erläutert, wie man einen mehrzeiligen String in C++ deklariert.

Verwendung der Klasse std::string zur Deklaration eines mehrzeiligen Strings in C++

Das Objekt std::string kann mit einem String-Wert initialisiert werden. In diesem Fall deklarieren wir die String-Variable s1 als lokale Variable der Funktion main. C++ erlaubt die automatische Verkettung mehrerer in doppelten Anführungszeichen stehender String-Literale in einer Anweisung. So kann man bei der Initialisierung der string-Variablen beliebig viele Zeilen einfügen und den Code konsistent lesbar halten.

#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;
}

Ausgabe:

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

Verwendung der const char * Notation zur Deklaration von mehrzeiligen String-Literalen

In den meisten Situationen kann es jedoch praktischer sein, ein schreibgeschütztes Zeichenkettenliteral mit einem const-Qualifier zu deklarieren. Dies ist vor allem dann praktisch, wenn relativ lange Texte auf der Konsole ausgegeben werden sollen und diese Texte meist statisch sind und sich im Laufe der Zeit kaum oder gar nicht ändern. Beachten Sie, dass die Zeichenkette mit dem Qualifier const in das Objekt std::string konvertiert werden muss, bevor sie als Argument des copy-Algorithmus übergeben wird.

#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;
}

Ausgabe:

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

Verwendung der const char * Notation mit Backlash-Zeichen Mehrzeiliges String-Literal deklarieren

Alternativ kann man auch das Backslash-Zeichen \ verwenden, um ein mehrzeiliges String-Literal zu konstruieren und es dem const qualifizierten Zeiger char zuzuweisen. Kurz gesagt, das Backslash-Zeichen muss am Ende jedes Zeilenumbruchs enthalten sein, was bedeutet, dass die Zeichenkette in der nächsten Zeile fortgesetzt wird.

Seien Sie sich aber bewusst, dass die Handhabung des Zeilenumbruchs fehleranfälliger wird, da alle unsichtbaren Zeichen wie Tabulatoren oder Leerzeichen in die Ausgabe einbezogen werden. Andererseits kann man diese Funktion nutzen, um einige Muster einfacher auf der Konsole darzustellen.

#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;
}

Ausgabe:

          This string will
        printed as the pyramid
    as one single string literal form
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ String