C++: string do C++
Última atualização: 2026-08-26
Strings no estilo C (arrays de caracteres) são trabalhosas de usar e propensas a erros (estouros de buffer, esquecer o
\0).O C++ fornece a classe string — encapsulando strings em objetos, tornando-as seguras e convenientes de usar.
1. O que é string?
(1) 1.1 Analogia do Mundo Real
| Exemplo do Mundo Real | Equivalente no Programa |
|---|---|
| Você tem uma mochila onde pode colocar coisas | Um objeto string |
| A mochila pode expandir automaticamente (trocar por uma maior quando cheia) | string gerencia memória dinamicamente |
| A mochila tem vários bolsos para fácil acesso | Funções membro da string |
Vantagens da string:
- Não precisa gerenciar memória — alocação e desalocação automáticas
- Não precisa se preocupar com
\0— o terminador nulo é tratado automaticamente - Funcionalidade poderosa — concatenação, busca e substituição são todas convenientes
(2) 1.2 Por que Usar string?
Usando strings no estilo C (trabalhoso):
▶ Exemplo 2: Exemplo de Código (Dificuldade ⭐)
#include <iostream>
#include <cstring>
int main() {
char greeting[50] = "Hello, ";
char name = "MOTO";
std::strcat(greeting, name); // Have to worry about array size
std::cout << greeting << std::endl;
return 0;
}
Saída:
(program output)
Usando string (simples):
#include <iostream>
#include <string>
int main() {
std::string greeting = "Hello, ";
std::string name = "MOTO";
greeting += name; // Automatic concatenation, no need to worry about memory
std::cout << greeting << std::endl;
return 0;
}
2. Declarando e Inicializando string
(1) 2.1 Uso Básico
#include <iostream>
#include <string>
int main() {
// Method 1: Direct initialization
std::string s1 = "Hello";
// Method 2: Using constructor
std::string s2("World");
// Method 3: Repeat a character
std::string s3(5, '*'); // "*****"
std::cout << s1 << " " << s2 << " " << s3 << std::endl;
return 0;
}
💡 Ponto-chave: Você deve #include <string> para usar string.
3. Operações Comuns com string
(1) 3.1 Concatenando Strings (+ e +=)
#include <iostream>
#include <string>
int main() {
std::string firstName = "MOTO";
std::string lastName = "Zhang";
// Method 1: Using +
std::string fullName1 = firstName + " " + lastName;
std::cout << fullName1 << std::endl; // MOTO Zhang
// Method 2: Using +=
std::string fullName2 = firstName;
fullName2 += " ";
fullName2 += lastName;
std::cout << fullName2 << std::endl; // MOTO Zhang
return 0;
}
(2) 3.2 Obtendo o Comprimento (length e size)
#include <iostream>
#include <string>
int main() {
std::string name = "MOTO";
std::cout << "name: " << name << std::endl;
std::cout << "length(): " << name.length() << std::endl; // 4
std::cout << "size(): " << name.size() << std::endl; // 4
return 0;
}
💡 Dica: length() e size() são exatamente iguais — use qualquer um.
(3) 3.3 Acessando Caracteres Individuais ([] e at)
#include <iostream>
#include <string>
int main() {
std::string name = "MOTO";
// Method 1: Using []
std::cout << name[0] << std::endl; // M
name[0] = 'm'; // Can modify
// Method 2: Using at() (checks bounds)
std::cout << name.at(1) << std::endl; // o
// name.at(10); // ❌ Will throw exception (safer than [])
return 0;
}
💡 Diferença:
name[i]— Sem verificação de limites, mais eficientename.at(i)— Com verificação de limites, mais seguro mas um pouco mais lento
4. Funções Membro Comuns da string
(1) 4.1 Encontrando uma Substring (find)
#include <iostream>
#include <string>
int main() {
std::string text = "Hello, World!";
// Find substring
size_t pos = text.find("World");
if (pos != std::string::npos) {
std::cout << "Found \"World\",Position: " << pos << std::endl; // 7
} else {
std::cout << "Not Found" << std::endl;
}
return 0;
}
💡 Dica: Se não for encontrado, find() retorna std::string::npos (tipicamente a versão sem sinal de -1).
(2) 4.2 Extraindo uma Substring (substr)
#include <iostream>
#include <string>
int main() {
std::string email = "moto@example.com";
// Extract substring: starting at position 0, take 4 characters
std::string user = email.substr(0, 4);
std::cout << "Username: " << user << std::endl; // moto
// Extract substring: starting at position 5, take to the end
std::string domain = email.substr(5);
std::cout << "Domain: " << domain << std::endl; // example.com
return 0;
}
(3) 4.3 Substituindo uma Substring (replace)
#include <iostream>
#include <string>
int main() {
std::string text = "Hello, World!";
// Replace: starting at position 7, 5 characters, replace with "C++"
text.replace(7, 5, "C++");
std::cout << text << std::endl; // Hello, C++!
return 0;
}
5. Entrada e Saída com string
(1) 5.1 Lendo com cin (Para em Espaços)
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Please enter your name: ";
std::cin >> name; // ⚠️ Stops at spaces
std::cout << "Hello," << name << "!" << std::endl;
return 0;
}
Resultado da Execução:
Please enter your name: MOTO Zhang
Hello,MOTO! ← Only read "MOTO"
(2) 5.2 Lendo uma Linha Completa com getline (Recomendado)
#include <iostream>
#include <string>
int main() {
std::string fullName;
std::cout << "Please enter your full name: ";
std::getline(std::cin, fullName); // ✅ Reads the entire line (including spaces)
std::cout << "Hello," << fullName << "!" << std::endl;
return 0;
}
Resultado da Execução:
Please enter your full name: MOTO Zhang
Hello,MOTO Zhang! ← Read completely
💡 Ponto-chave: Se você usou cin >> antes, lembre-se de adicionar cin.ignore() para descartar o caractere de nova linha!
6. Prática: Processamento Simples de Texto
▶ Exemplo 1: Contando Palavras (Dificuldade ⭐⭐)
#include <iostream>
#include <string>
#include <sstream> // For stringstream
int main() {
std::string line;
std::cout << "Please enter a line of text: ";
std::getline(std::cin, line);
// Use stringstream to split words
std::istringstream ss(line);
std::string word;
int count = 0;
while (ss >> word) {
count++;
}
std::cout << "Word count: " << count << std::endl;
return 0;
}
Saída:
Please enter a line of text:
Word count:
Resultado da Execução:
Please enter a line of text: Hello World, this is C++!
Word count: 5
7. Erros Comuns
(1) 7.1 Esquecer #include <string>
Exemplo de Erro:
#include <iostream> // ❌ Forgot to include string
int main() {
std::string name = "MOTO"; // ❌ Compile error
return 0;
}
Correção: Adicione #include <string>.
(2) 7.2 Usar cin >> para Ler Strings com Espaços
Exemplo de Erro:
#include <iostream>
#include <string>
int main() {
std::string address;
std::cout << "Please enter your address: ";
std::cin >> address; // ❌ Stops at spaces
std::cout << "Address: " << address << std::endl;
return 0;
}
Correção: Use std::getline().
❓ Perguntas Frequentes
P: string e char podem ser convertidos entre si?* R: Sim! > > // string → char > std::string s = "Hello"; > const char cstr = s.c_str(); // Returns const char* > > // char* → string > char cstr = "Hello"; > std::string s = cstr; // Automatic conversion >** P: Por que minha concatenação de strings está lenta? R: Cada concatenação pode realocar memória. Se você está concatenando em um loop, use
std::stringstreamoustd::string::reserve()para pré-alocar espaço. P: string pode armazenar caracteres chineses? R: Sim! Mas certifique-se de que o arquivo fonte esteja codificado em UTF-8 e o terminal suporte UTF-8. > > std::string name = "Zhang San"; // Can store Chinese > std::cout << name << std::endl; >
▶ Exemplo 3: Concatenação e Busca de Strings (Dificuldade ⭐)
#include <iostream>
#include <string>
int main() {
std::string s1 = "Hello";
std::string s2 = "World";
std::string s3 = s1 + " " + s2;
std::cout << "Concatenation result: " << s3 << std::endl;
size_t pos = s3.find("World");
if (pos != std::string::npos) {
std::cout << "Found World at position: " << pos << std::endl;
}
return 0;
}
Saída:
Concatenation result: Hello World
Found World at position: 6
std::string do C++ suporta + para concatenação, e find() retorna a posição ou npos (não encontrado).
📖 Resumo
- string é a classe de string do C++, mais segura e fácil de usar que strings no estilo C
- Deve-se usar
#include <string> - Operações comuns: concatenação com
+/+=,length()/size()para comprimento,find()para busca,substr()para extração de substrings - Use
std::getline()para ler uma linha completa stringgerencia memória automaticamente — não precisa se preocupar com estouro de buffer
📝 Exercícios
-
Básico (Dificuldade ⭐): Escreva um programa que permita ao usuário inserir duas strings, concatene-as e exiba o resultado.
-
Intermediário (Dificuldade ⭐⭐): Escreva um programa que permita ao usuário inserir uma string e conte quantos caracteres numéricos ('0'-'9') ela contém.
-
Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente um "sistema simples de gerenciamento de informações de estudantes":
-
Use
stringpara armazenar nome, matrícula e curso -
Implemente funcionalidades para adicionar, buscar e exibir todas as informações dos estudantes
-
(Opcional) Salve dados em um arquivo
- std::string é a string da biblioteca padrão do C++, com gerenciamento automático de memória
- string suporta concatenação com +, comparação com ==, acesso por subscrito com []
- Métodos comuns: length/size/substr/find/append
- Interoperabilidade entre string e string no estilo C: c_str()
- Cuidado com problemas de buffer ao misturar getline e cin >> para entrada
8. 🚀 Próximos Passos
Agora que você aprendeu string, vamos avançar para Structs (Lição 20) — combinando múltiplas variáveis de tipos diferentes em uma única unidade, um precursor das "classes"!