Remover pontuação de uma string em C++
-
Use as funções
std::erase
estd::remove_if
para remover a pontuação da string em C++ - Use a função personalizada para remover pontuação da string em C++
- Use o método iterativo para remover pontuação de string em C++
Este artigo explicará vários métodos de como remover a pontuação de uma string em C++.
Use as funções std::erase
e std::remove_if
para remover a pontuação da string em C++
std::remove_if
faz parte da biblioteca de algoritmos STL e pode remover todos os elementos para os quais a condição dada é avaliada como verdadeira. A condição deve retornar o valor bool
para cada elemento no intervalo. Neste caso, passamos a função ispunct
para verificar os símbolos de pontuação. Observe que std::remove_if
retorna um iterador pass-the-end para o novo intervalo de valores, então estamos encadeando a chamada para ele com o método erase
que resulta na string analisada. Esta solução funciona de forma semelhante ao idioma erase-remove
.
#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. Ut "
"porttitor.";
cout << text << endl;
text.erase(std::remove_if(text.begin(), text.end(), ispunct), text.end());
cout << text << endl;
return EXIT_SUCCESS;
}
Resultado:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Use a função personalizada para remover pontuação da string em C++
Como alternativa, pode-se mover o método anterior para uma função separada, criando uma cópia local da string dada e operando nela enquanto retorna o valor analisado para o código do chamador. Esta função pode ser utilizada para estender a funcionalidade para suportar diferentes grupos de caracteres ou até mesmo passar a função de predicado customizado para o terceiro parâmetro do algoritmo remove_if
.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string removeSpaces(const string& s) {
string tmp(s);
tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
return tmp;
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
string parsed_text = removeSpaces(text);
cout << parsed_text << endl;
return EXIT_SUCCESS;
}
Resultado:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Use o método iterativo para remover pontuação de string em C++
Outra alternativa é implementar uma função separada que itera por meio de cada caractere da string. A função pega a string por referência e utiliza o loop for
para percorrer a string. Em cada iteração, ispunct
é chamado para verificar se o caractere é um símbolo de pontuação ou não. Observe que, à variável len
é atribuído o tamanho da string em cada condição correspondente porque o objeto string original é modificado pela função erase
e o loop precisa renovar a contagem.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
void removeSpaces2(string& s) {
for (int i = 0, len = s.size(); i < len; i++) {
if (ispunct(s[i])) {
s.erase(i--, 1);
len = s.size();
}
}
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
removeSpaces2(text);
cout << text << endl;
return EXIT_SUCCESS;
}
Resultado:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
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