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:

  1. Não precisa gerenciar memória — alocação e desalocação automáticas
  2. Não precisa se preocupar com \0 — o terminador nulo é tratado automaticamente
  3. 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 ⭐)

TEXT 📖 Somente leitura
#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:

TEXT 📖 Somente leitura
(program output)

Usando string (simples):

CPP
#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

CPP
#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 +=)

CPP
#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)

CPP
#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)

CPP
#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:



4. Funções Membro Comuns da string

(1) 4.1 Encontrando uma Substring (find)

CPP
#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)

CPP
#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)

CPP
#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)

CPP
#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:

TEXT 📖 Somente leitura
Please enter your name: MOTO Zhang
Hello,MOTO! ← Only read "MOTO"

(2) 5.2 Lendo uma Linha Completa com getline (Recomendado)

CPP
#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:

TEXT 📖 Somente leitura
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 ⭐⭐)

CPP
#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;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Please enter a line of text: 
Word count: 

Resultado da Execução:

TEXT 📖 Somente leitura
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:

CPP
#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:

CPP
#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::stringstream ou std::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 ⭐)

CPP
#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;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Concatenation result: Hello World
Found World at position: 6
💡 Dica: O std::string do C++ suporta + para concatenação, e find() retorna a posição ou npos (não encontrado).


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Escreva um programa que permita ao usuário inserir duas strings, concatene-as e exiba o resultado.

  2. 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.

  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente um "sistema simples de gerenciamento de informações de estudantes":

  4. Use string para armazenar nome, matrícula e curso

  5. Implemente funcionalidades para adicionar, buscar e exibir todas as informações dos estudantes

  6. (Opcional) Salve dados em um arquivo


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"!

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%