Fundamentos de Strings em C++

C++Beginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá sobre strings em C++. Você aprenderá como definir e inicializar strings e como usar funções de string.

Pré-visualização do Conteúdo

C++ suporta dois tipos de strings:

  1. Uma string é um array de char, terminado com um caractere NULL '\0' (Hex 0). Também é chamada de Character-String ou string no estilo C.
  2. A nova classe string introduzida no C++98.

A classe string de "alto nível" é recomendada, porque é muito mais fácil de usar e entender. No entanto, muitos programas legados usavam C-strings; muitos programadores também usam C-strings de "baixo nível" para controle total e eficiência; além disso, em algumas situações, como argumentos de linha de comando, apenas C-strings são suportadas. Portanto, você pode precisar entender ambos os conjuntos de strings.

  • Declaração e inicialização de strings
  • Entrada/saída de strings
  • Operações com strings

Declaração e Inicialização de Strings

Para usar a classe string, inclua o cabeçalho <string> e "using namespace std".

Você pode declarar e inicializar uma string com um literal de string, inicializar com uma string vazia ou inicializar com outro objeto string. Por exemplo:

#include <string>
using namespace std;

string str1("Hello");  // Inicializa com um literal de string (Inicialização implícita)
string str2 = "world"; // Inicializa com um literal de string (Inicialização explícita via operador de atribuição)
string str3;           // Inicializa com uma string vazia
string str4(str1);     // Inicializa copiando de um objeto string existente

Entrada/Saída de Strings

Por exemplo:

/* Testando a entrada e saída da classe string */
#include <iostream>
#include <string>     // Necessário este cabeçalho para usar a classe string
#include <limits>
using namespace std;  // Também necessário para <string>

int main() {
   string message("Hello");
   cout << message << endl;

   // Entrada de uma palavra (delimitada por espaço) em uma string
   cout << "Digite uma mensagem (sem espaço): ";
   cin >> message;
   cout << message << endl;

   cin.ignore(numeric_limits<streamsize>::max(), '\n');
   // limpa cin até a nova linha (necessário o cabeçalho <limits>)

   // Entrada de uma linha em uma string
   cout << "Digite uma mensagem (com espaços): ";
   getline(cin, message);  // Lê a entrada de cin em message
   cout << message << endl;
   return 0;
}

Saída:

Hello
Digite uma mensagem (sem espaço): hello
hello
Digite uma mensagem (com espaços): hello world
hello world
image desc

NOTAS:

  • Precisamos de "#include <string>" para usar a classe string, e "using namespace std" pois string é definido no namespace std.
  • "cin >> aStr" lê uma palavra (delimitada por espaço) de cin (teclado) e atribui à variável string aStr.
  • getline(cin, aStr) lê a linha inteira (até '\n') de cin e atribui a aStr. O caractere '\n' é descartado.
  • Para limpar cin, você pode usar a função ignore(numeric_limits<streamsize>::max(), '\n') para descartar todos os caracteres até '\n'. numeric_limits está no cabeçalho <limits>.

Operações com Strings

  • Verificando o comprimento de uma string:

    string str("Hello, world");
    // ambos retornam o comprimento da string
    cout << str.length() << endl;  // 12
    cout << str.size()   << endl;  // 12
  • Verificar se a string está vazia:

    string str1("Hello, world");
    string str2;                   // String vazia
    // Verifica se a string está vazia.
    cout << str1.empty() << endl;  // 0 (false)
    cout << str2.empty() << endl;  // 1 (true)
  • Copiando de outra string: Simplesmente use o operador de atribuição "=".

    string str1("Hello, world"), str2;
    str2 = str1;
    cout << str2 << endl;   // Hello, world
  • Concatenando com outra string: Use o operador de adição "+" ou a adição composta "+=".

    string str1("Hello,");
    string str2(" world");
    cout << str1 + str2 << endl;  // "Hello, world"
    cout << str1 << endl;         // "Hello,"
    cout << str2 << endl;         // " world"
    str1 += str2;
    cout << str1 << endl;  // "Hello, world"
    cout << str2 << endl;  // " world"
    string str3 = str1 + str2;
    cout << str3 << endl;  // "Hello, world world"
    str3 += "again";
    cout << str3 << endl;  // "Hello, world worldagain"
  • Lendo/Escrevendo caracteres individuais de uma string:

    string str("Hello, world");
    // Retorna o char no índice, o índice começa em 0. Realiza a verificação de limites do índice.
    cout << str.at(0) << endl;  // 'H'
    cout << str[1] << endl;     // 'e'
    cout << str.at(str.length() - 1) << endl;  // 'd'
    
    str.at(1) = 'a';  // Escreve no índice 1
    cout << str << endl;  // "Hallo, world"
    
    str[0] = 'h';
    cout << str << endl;  // "hallo, world"
  • Extraindo sub-string:

    string str("Hello, world");
    // Retorna a sub-string começando em beginIndex, de tamanho
    cout << str.substr(2, 6) << endl;  // "llo, w"
  • Comparando com outra string:

    string str1("Hello"), str2("Hallo"), str3("hello"), str4("Hello");
    cout << str1.compare(str2) << endl;   // 1   'e' > 'a'
    cout << str1.compare(str3) << endl;   // -1  'h' < 'H'
    cout << str1.compare(str4) << endl;   // 0
    
    // Você também pode usar o operador == ou !=
    if (str1 == str2) cout << "Same" << endl;
    if (str3 != str4) cout << "Different" << endl;
    cout << boolalpha;  // imprime bool como true/false
    cout << (str1 != str2) << endl;
    cout << (str1 == str4) << endl;
  • Procurando/Substituindo caracteres: Você pode usar as funções disponíveis em #include <algorithm>

    Por exemplo:

    #include <algorithm>
    ......
    string str("Hello, world");
    replace(str.begin(), str.end(), 'l', '_');
    cout << str << endl;    // He__o, wor_d

Exemplo

/* Exemplo sobre a função string do C++ */
#include <iostream>
#include <string>    // usa a classe string
using namespace std;

int main() {
   string msg = "hello, world!";
   cout << msg << endl;
   cout << msg.length() << endl;  // comprimento da string
   cout << msg.at(1) << endl;     // char no índice 1
   cout << msg[1] << endl;        // o mesmo que acima
   cout << msg.empty() << endl;   // testa se a string está vazia
   cout << msg.substr(3, 3) << endl; // sub-string começa em
                                     // pos 3 de tamanho 3
   cout << msg.replace(3, 3, "why") << endl; // substitui sub-string
   cout << msg.append("end") << endl;        // anexa no final
   cout << msg + "end" << endl;              // o mesmo que acima
   cout << msg.insert(3, "insert") << endl;  // insere após a pos 3

   string msg1;
   msg1 = msg;   // copia
   cout << msg1 << endl;

   cout << "Digite uma linha: ";
   getline(cin, msg);   // lê uma linha de entrada
   cout << msg << endl;
}

Saída:

hello, world!
13
e
e
0
lo,
helwhy world!
helwhy world!end
helwhy world!endend
helinsertwhy world!end
helinsertwhy world!end
Digite uma linha: a
a
image desc

Resumo

String é outro tipo de dado importante além dos números. Nesta seção, falamos sobre o uso de strings, o C++ fornece muitos métodos úteis para lidar com strings, aprenda a usá-los com facilidade.