Declare Multiline String em C++

Jinku Hu 12 outubro 2023
  1. Utilizar a classe std::string para declarar uma string multilinha em C++
  2. Use a notação const char * para declarar literal de string multilinha
  3. Use a notação const char * com caracteres de folga Declare o literal de string multilinha
Declare Multiline String em C++

Este artigo explicará vários métodos de como declarar uma string multilinha em C++.

Utilizar a classe std::string para declarar uma string multilinha em C++

O objecto std::string pode ser inicializado com um valor string. Neste caso, declaramos a variável string s1 como uma variável local para a função main. C++ permite a concatenação automática de múltiplas literais de string com aspas duplas numa declaração. Como resultado, pode-se incluir qualquer número de linhas enquanto se inicializa a variável string e manter o código mais consistentemente legível.

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

Resultado:

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

Use a notação const char * para declarar literal de string multilinha

Na maioria das situações, no entanto, pode ser mais prático declarar um literal de string somente leitura com um qualificador const. Isto é mais prático quando os textos relativamente longos devem ser enviados para a consola, e estes textos são na sua maioria estáticos com poucas ou nenhumas alterações ao longo do tempo. Note-se que, a string do qualificador const precisa de ser convertida para o objecto std::string antes de passar como um argumento do algoritmo copy.

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

Resultado:

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

Use a notação const char * com caracteres de folga Declare o literal de string multilinha

Alternativamente, também se pode utilizar o carácter de contrabarra para construir um literal de string multilinha e atribuí-la ao ponteiro de char qualificado de const. Em resumo, o carácter de contrabarra precisa de ser incluído no final de cada quebra de linha, o que significa que a string continua na linha seguinte.

No entanto, tenha em atenção que o espaçamento se torna mais susceptível a erros, uma vez que quaisquer caracteres invisíveis, como separadores ou espaços, serão incluídos na saída. Por outro lado, pode-se utilizar esta característica para exibir alguns padrões mais facilmente para consolar.

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

Resultado:

          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

Artigo relacionado - C++ String