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