Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Como declarar uma string
  2. Acessar/alterar caracteres
  3. Como percorrer uma string
  4. Descobrir o tamanho de uma string
  5. Como concatenar strings
  6. Strings como parâmetro e retorno
  7. verificar string nula ou vazia
  8. Copiar string
  9. Comparar string
  10. Vetor/matriz de string
  11. std::string
  12. Métodos classe String

Assim como na linguagem C, em C, o tipo de dado string é uma cadeia de caracteres justapostos. Abaixo uma abstração da representação de uma string em um local de memória.

0 1 2 3 4 5 6
's' 't' 'r' 'i' 'n' 'g' '\0'

Para a declaração de uma string em C++, utilizando a sintaxe A abaixo. A sintaxe B diz respeito a atribuição de valor à uma variável do tipo string durante a declaração.

Sintaxe A
string nome_variavel; //nula
Sintaxe B
string nome_variavel = {}; //vazia

string nome_variavel = "uma string C++";

string nome_variavel  = {'u','m','a','s','t','r','i','n','g','+','+'};

string nome_variavel = string("uma string c++"); //construtor
Exemplo 1
#include <iostream>
using namespace std;

int main()
{
    string txt1 = ""; //vazia
    string txt3 = "uma string ++";
    string txt4 = {'u','m','a','s','t','r','i','n','g','+','+'};
    cout << txt3;
}
Saída
uma string c++

O acesso e/ou alteração dos caracteres de uma string em C++, assim como C, é feito utilizando o indexador [] que recebe um índice ou posição do caractere como argumento. Strings em C++ são mutáveis.

Sintaxe
variavel_string[indice] = valor; //atribuição

variavel_string[indice]; //acesso
Exemplo 2
#include <iostream>
using namespace std;

int main()
{
    string string1 = "string2";
    string1[0] = 'S';
    cout << string2;
    return 0;
}
Saída
String2

Para descobrirmos o tamanho de uma string em C++, podemos utilizar seu método length que retorna um inteiro contendo o tamanho da string.

Sintaxe
variavel_string.length()
Exemplo 3
#include <iostream>

using namespace std;

int main()
{
    string str = "uma string em c++";
    cout << str.length() ;
    return 0;
}
Saída
7

O operador sizeof não pode ser utilizado com string, pois não irá retornar seu número de elementos e sim seu tamanho em bytes que depende da codifição(encoding) de caracteres usada.

Utilizando o método length podemos recuperar o tamanho de uma string e iterar sobre essa com o comando for, por exemplo, que foi visto em C++ Básico: Comando for.

Exemplo 4: for
#include <iostream>

using namespace std;

int main()
{
    string str = "uma string em c++";

    for(int i= 0 ; i < str.length() ; i++)
        cout << str[i];
    return 0;
}
Saída
uma string em c++
Exemplo 4.1 : foreach
#include <iostream>

using namespace std;

int main()
{
    string str = string("uma string em c++");
        
    for( char chr: str)
        cout << chr;
    
    return 0;
}
Saída
uma string em c++

Em C++ , diferente da linguagem C, podemos concatenar duas ou mais strings utilizando o operador (+). Esse tipo de concatenação está presente em várias linguagens com Java, C#, Python e outras.

Sintaxe
string1 + string2
Exemplo 5
#include <iostream>

using namespace std;

int main()
{
    string str1 = "uma string";
    string str2 = " em c++";
    cout << str1 + str2;
    return 0;
}
Saída
string2

Uso de string como parâmetro de uma função é feita utilizando o tipo string como tipo do parâmetro, como pode ser visto nas sintaxes abaixo:

Sintaxe
tipo_retorno nome_funcao(string nome_parametro); //protótipo
Exemplo 6
#include <iostream>
using namespace std;

void funcao(string str)
{
    cout<< str;
}

int main()
{
    string txt4 = {'u','m','a',' ','s','t','r','i','n','g',' ','+','+'};
    funcao(txt4);
}
Saída
uma string ++

Para declararmos funções que retornam o tipo de dado string, precisamos declará-las com o tipo de retorno como string, como pode ser visto nas sintaxes abaixo:

Sintaxe
string nome_funcao(<lista_parametros>); //protótipo
Exemplo 7
#include 
using namespace std;

string funcao()
{
    //corpo omitido
    return {'u','m','a',' ','s','t','r','i','n','g',' ','+','+'};
}

int main()
{
    cout << funcao();
}
Saída
uma string ++

A linguagem C++ possui em suas classes nativas a classe String que fornece funções para manipular seus dados. Abaixo uma lista das funções mais comuns.

Vários métodos utilizam o tipo de dado size_t que o mesmo que unsigned long int e que pode ser utilizado casting para os outros tipos derivados de int de menor tamanho.

Método Descrição
append Concatena strings
assign -
at (C++11) Retorna referência para um elemento
back -
begin -
c_str -
capacity (C++11) -
cbegin (C++11) -
cend -
compare Compara duas string ou substrings
copy(C++11) Copia uma string ou substring
crbegin (C++11) -
crend -
data -
empty Verifica se um string está vazia
end -
erase Remove substring ou caracters de uma string
find Retorna o índice da primeira ocorrência de uma substring
find_first_not_of Retona a posição da primeira ocorrência de um caracter não contido em grupo
find_first_of Retona a posição da primeira ocorrência de um caracter contido em de um grupo
find_last_not_of Retona a posição da última ocorrência de um caracter não contido em um grupo
find_last_of (C++11) Retona a posição da primeira ocorrência de um caracter contido em um grupo
front -
get_allocator -
insert Insere um caractere em uma string
length Retorna o número de elementos da um string
max_size -
pop_back Remove um caracter do fim da string
push_back Adiciona um caracter no fim de uma string
rbegin -
rend -
replace Substitui substrings em uma string
reserve -
resize -
rfind (C++11) -
shrink_to_fit -
size retorno tamanho em bytes de uma string
substr -
npos -
getline -
swap -

O método append é utilizado quando precisamos concatenar strings. Uma string que é passada como argumento para o método é concatenada ao fim.

Sintaxe
public string append(str);
Onde
str: string que desejamos concatenar.
Retorno
Nova string contendo str concatenada.
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1 = "uma string";
    string str2 = " em c++";
    cout << str1.append(str2);
    return 0;
}
Saída
uma string em c++

Com o método at, podemos recuperar a referência de um elemento em um determinado índice que é passado como argumento para o método.

Sintaxe
public char& at(size_t pos);
Onde
pos: posição do caracter contido em um string.
Retorno
Referencia para o elemento na posição pos.
Exemplo
#include 
using namespace std;

int main()
{
    string str1 = "uma String";
    cout << str1.at(4);
    return 0;
}
Saída
string1 concatenada com a string2 

Para remoção de todos os caracteres de nossas strings, utilizamos o método clear. Esse método não recebe argumentos e não possui retorno.

Sintaxe

void clear();

public void clear();
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C++";

    cout <<  "Entrada:|" << str1 <<"|"<< endl;
    str1.clear(); 
    cout << "Saída:|" << str1 <<"|"<< endl;
    
    return 0;
}
Saída
Entrada:|String C++|
Saída:||

Para comparação entre duas string, utilizamos o método compare que recebe como argumento uma string e retorna um número inteiro representando o resultado.

Sintaxe
public int compare(string str)
Onde
str : string para comparação.
Retorno
 0: Se iguais
 1: Se diferentes.  Primeiro caractere é maiúsculo ou string > str
-1: Se diferentes. Primeiro caractere é minúsculo ou string < str
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="Teste";
    string str2="Testee";
    string str3="Teste";
    
    cout << str1.compare(str2) << endl;
    cout << str1.compare(str3) << endl;
    
    return 0;
}
Saída
strcmp: -1 
strcmp: 0 

Para copiarmos o conteúdo de nossas strings, usamos o método copy. Tanto uma string completa por ser copiada como uma substring podem ser copiadas.

Sintaxe
public size_t copy(char* s, size_t len, size_t pos = 0) const;
Onde
s: ponteiro para um array de caracteres.
len: número de caracteres para copiar.
pos: Posição do primeiro caractere para copiar.
Retorno
Inteiro contendo o número de caracteres copiados. 
Exemplo
#include <iostream>
using namespace std;

int main ()
{
  char dest[10];
  string str = "Teste";
  int qtd = str.copy(dest,5,0);
  dest[qtd]='\0';
  cout << dest;
  return 0;
}
Saída
Teste

Para verificar se uma string está vazia, utilizamos o método empty. Esse método não recebe argumentos e retorna um booleano como resultado da verificação.

Sintaxe
public bool empty();
Retorno
Booleano contendo true se a string está vazia, false caso contrário.
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C++", str2="";
    cout <<  "str1:" << boolalpha << str1.empty() << endl;
    cout <<  "str2:" << boolalpha << str2.empty() << endl;
    
    return 0;
}
Saída
str1:false
str2:true

Para remover caracteres, padrões ou substrings, podemos utilizar o método erase que recebe uma posição e uma quantidade de caracteres para remoção.

Sintaxe
public string& erase(size_t pos = 0, size_t len);

iterator erase(const_iterator p);
iterator erase(const_iterator first, const_iterator last);
Onde
len: quantidade de caracteres para remoção.
pos: posição inicial para remoção.
Retorno
-
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C++";
    cout <<  str1.erase(6,2);
     cout <<  str1;
    return 0;
}
Saída
String++

O método find é usado para encontrar o índice da primeira ocorrência de uma substring ou sequência de caracteres dentro de uma string. Esse método recebe uma string como argumento e retorna um valor inteiro como índice.

Sintaxe
public size_t find(const string& str, size_t pos = 0) const noexcept;

size_t find(const char* s, size_t pos = 0) const;
size_t find(const char* s, size_t pos, size_type n) const;
size_t find(char c, size_t pos = 0) const noexcept;
Onde
str: string para buscar.
pos: posição inicial da busca.
Retorno
Inteiro contendo o índice da primeira ocorrência de str, caso contrário -1.
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C++";
    cout <<  "+ no índice: " << str1.find('+');
    return 0;
}
Saída
+ no índice: 8

O método find_first_not_of é utilizado para buscar a localização da primeira ocorrência de caracteres que não estão contidos em um grupo de caracteres passados como argumento para o método.

Sintaxe
public size_t find_first_not_of(const string& str, size_t pos = 0) const noexcept;

size_t find_first_not_of(const char* s, size_t pos = 0) const;
size_t find_first_not_of(const char* s, size_t pos, size_t n) const;
size_t find_first_not_of(char c, size_t pos = 0) const noexcept;
Onde
str: string para buscar.
pos: posição inicial da busca.
Retorno
Inteiro contendo o índice da primeira ocorrência de um caracter encontrado. Casso contrário retorna npos.
Exemplo
#include <iostream>
using namespace std;
 
int main() 
{
    string str = " ,;_uma string c++";
    int pos = str.find_first_not_of(" ,;_");
    cout << pos;
}
Saída
4

O método find_first_of é utilizado para buscar a localização da primeira ocorrência de um caractere dentro de um grupo de caracteres passados como argumento par o método.

Sintaxe
public size_t find_first_of(const string& str, size_t pos = 0) const noexcept;

size_t find_first_of(const char* s, size_t pos = 0) const;
size_t find_first_of(const char* s, size_t pos, size_t n) const;
size_t find_first_of(char c, size_t pos = 0) const noexcept;
Onde
str: string para buscar.
pos: posição inicial da busca.
Retorno
Inteiro contendo o índice da primeira ocorrência de um caracter encontrado. Casso contrário retorna npos.
Exemplo
#include <iostream>
using namespace std;
 
int main() 
{
    string str = "uma string c++";
    int pos = str.find_first_of("str");
    cout << pos;
}
Saída
4

O método find_last_not_of é utilizado para buscar a localização da última ocorrência de caracteres que não estão contidos no grupo de caracteres passados como argumento para o método.

Sintaxe
public size_t find_last_not_of(const string& str, size_t pos = 0) const noexcept;

size_t find_last_not_of(const char* s, size_t pos = 0) const;
size_t find_last_not_of(const char* s, size_t pos, size_t n) const;
size_t find_last_not_of(char c, size_t pos = 0) const noexcept;
Onde
str: string para buscar.
pos: posição inicial da busca.
Retorno
Inteiro contendo o índice da primeira ocorrência de um caracter encontrado. Casso contrário retorna npos.
Exemplo
#include <iostream>
using namespace std;
 
int main() 
{
    string str = " ,;_uma ,;_string c++ ,;_";
    int pos = str.find_last_not_of(" ,;_");
    cout << pos;
}
Saída
20

O método find_last_of é utilizado para buscar a localização da última ocorrência de caracteres passados como argumento.

Sintaxe
public size_t find_last_of(const string& str, size_t pos = 0) const noexcept;

size_t find_last_of(const char* s, size_t pos = 0) const;
size_t find_last_of(const char* s, size_t pos, size_t n) const;
size_t find_last_of(char c, size_t pos = 0) const noexcept;
Onde
str: string para buscar.
pos: posição inicial da busca.
Retorno
Inteiro contendo o índice da primeira ocorrência de um caracter encontrado. Casso contrário retorna npos.
Exemplo
#include <iostream>
using namespace std;
 
int main() 
{
    string str = "c++ uma string c++";
    int pos = str.find_last_of("++");
    cout << pos;
}
Saída
17

O método insert é utilizado para inserir um caracter em um posição específica passada como argumento para o método.

Sintaxe

public string& insert(size_t pos = 0, const string& str);

string& insert(size_t pos, const string& str);
string& insert(size_t pos, const string& str, size_t subpos, size_t sublen);
string& insert(size_t pos, const char* s);
string& insert(size_t pos, const char* s, size_t n);
string& insert(size_t pos,   size_t n, char c);iterator insert (const_iterator p, size_t n, char c);
iterator insert(const_iterator p, char c);
template <class InputIterator>iterator insert (iterator p, InputIterator first, InputIterator last);
string& insert(const_iterator p, initializer_list <char> il);
Onde
pos: posição para inserção em str.
str: string para inserção.
Retorno
-
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String";
    cout << str1 << endl;
    str1.insert(6," C++");
    cout << str1 << endl;
    
    return 0;
}
Saída
String
String C++

Com o método length podemos recuperar a quantidade de elementos ou caracteres contidos em uma string.

Sintaxe
public size_t length() const noexcept;
Onde
-
Retorno
size_t contendo o tamanho de uma string
Exemplo
#include <iostream>

using namespace std;

int main()
{
    string str = "uma string em c++";
    cout << str.length() ;
    return 0;
}
Saída
17

O métodos pop_back é utilizados para remover um caracter do fim de uma string. Esse método não possui argumentos e não retorna valor.

Sintaxe
public void pop_back();
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C++";

    str1.pop_back();
    str1.pop_back();
    cout <<  str1;
    return 0;
}
Saída
String C

O método push_back é utilizados para adicionar um caracter, que é passado como argumento, no fim de uma string. Esse método não retorna valor.

Sintaxe
public void push_back(char ch);
Onde
ch: caractere para adicionar
Retorno
-
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="String C";
    str1.push_back('+');
    str1.push_back('+');
    cout <<  str1;
    return 0;
}
Saída
String C++

Para substituirmos trechos ou padrões dentro de nossas string utilizamos o método replace que recebe uma posição, uma quantidade e uma string para substituição.

Sintaxe
public string& replace(size_t pos, size_t len, const string& str);

string& replace (const_iterator i1, const_iterator i2, const string& str);
string& replace (size_t pos,size_t len, const string& str, size_t subpos, size_t sublen = npos);
string& replace (size_t pos, size_t len, const char* s);
string& replace (const_iterator i1, const_iterator i2, const char* s);
string& replace (size_t pos, size_t len, const char* s, size_t n);
string& replace (const_iterator i1, const_iterator i2, const char* s, size_t n);
string& replace (size_t pos, size_t len, size_t n, char c);
string& replace (const_iterator i1, const_iterator i2, size_t n, char c);
template <class InputIterator>  string& replace (const_iterator i1, const_iterator i2, InputIterator first, InputIterator last);
string& replace (const_iterator i1, const_iterator i2, initializer_list <char> il);
Onde
pos: posição para substituição.
len: quantidade de caracters para substituição.
str: string para substituiçao
Retorno
A própria string contendo a subsituição str.
Exemplo
#include <iostream>
using namespace std;

int main()
{
    string str1="Uma XXXXXX qualquer";
    cout << str1 << endl;
    str1.replace(4,6,"string"); //substituir XXXXXX por string
    cout << str1 << endl;
   
    return 0;
}
Saída
Uma XXXXXX qualquer
Uma string qualquer
  1. 29/07/2025 - revisão 4 - Ajustes: descrição de seções, sintaxes, links de Tab. Métodos movidos; Adição de Ex. 4.1
  2. 30/09/2024 - revisão 3 - Correção: 'Parâmetro/argumento e retorno', links métodos, 'compare', e outros; ajustes pontuais
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 09/02/2024 - revisão 1 - correção em navegação, navegação de métodos, exemplos e erros gramaticais
  5. 30/06/2023 - versão inicial