Apagar String em C++

Jinku Hu 12 outubro 2023
Apagar String em C++

Este artigo demonstrará como usar a função std::string::erase para remover um caractere de uma string em C++.

Use a função std::string::erase para remover caracteres especificados na string

erase é uma função membro std::string que pode ser utilizada para remover os caracteres fornecidos da string. Ele tem três sobrecargas, cada uma das quais discutiremos nos exemplos a seguir.

A primeira sobrecarga aceita dois argumentos do tipo size_type denotando o index e a count. Esta versão tentará apagar o número count de caracteres começando na posição index, mas em alguns cenários, pode haver menos caracteres restantes após o índice dado, então a função é dita para remover min(count, size() - index) caracteres. A primeira sobrecarga de erase retorna o valor *this.

Ambos os parâmetros têm valores padrão e, quando passamos um único valor de argumento para a função, o resultado pode ser um pouco contra-intuitivo. Na verdade, o valor fornecido é interpretado como o parâmetro index e a count é considerada std::npos. Consequentemente, isso resulta no apagamento do resto da string após a posição fornecida.

O fragmento de código a seguir mostra cenários semelhantes - um usando funções de membro find e o outro - passando explicitamente o valor do índice.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(0, 6);
  cout << text << endl;

  text.erase(text.find('c'));
  cout << text << endl;

  text.erase(2);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Produção:

ipsum dolor sit amet, consectetur adipiscing elit.
ipsum dolor sit amet,
ip

A segunda sobrecarga da função aceita um único parâmetro que representa a posição do personagem a ser apagado. Este argumento deve ser o tipo de iterador correspondente; caso contrário, ele invocará a primeira sobrecarga. Podemos utilizar esta versão da função junto com o algoritmo std::find para remover a primeira ocorrência do caractere dado da string. Caso contrário, podemos passar a posição relativa do personagem usando iteradores begin ou end.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(std::find(text.begin(), text.end(), ','));
  cout << text << endl;

  text.erase(text.end() - 5);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Produção:

Lorem ipsum dolor sit amet consectetur adipiscing elit.
Lorem ipsum dolor sit amet consectetur adipiscing lit.

Finalmente, temos a terceira sobrecarga que pega dois iteradores como parâmetros e remove todos os caracteres no intervalo correspondente. O exemplo de código a seguir mostra como podemos remover todos os caracteres da string, exceto o inicial.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(text.begin() + 1, text.end());
  cout << text << endl;

  return EXIT_SUCCESS;
}

Produção:

L
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ String