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:
- Uma string é um array de
char, terminado com um caractereNULL'\0'(Hex0). Também é chamada de Character-String ou string no estilo C. - A nova classe
stringintroduzida 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

NOTAS:
- Precisamos de "
#include <string>" para usar a classestring, e "using namespace std" poisstringé definido no namespacestd. - "
cin >> aStr" lê uma palavra (delimitada por espaço) decin(teclado) e atribui à variávelstringaStr. getline(cin, aStr)lê a linha inteira (até'\n') decine atribui aaStr. O caractere'\n'é descartado.- Para limpar
cin, você pode usar a funçãoignore(numeric_limits<streamsize>::max(), '\n')para descartar todos os caracteres até'\n'.numeric_limitsestá 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; // 12Verificar 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, worldConcatenando 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

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.



