Remover espaços da string em C++
-
Use o idioma
erase-remove
para remover espaços de string em C++ - Use a função personalizada para remover espaços de string em C++
Este artigo demonstrará vários métodos sobre como remover espaços de uma string em C++.
Use o idioma erase-remove
para remover espaços de string em C++
Um dos métodos mais úteis para manipulação de intervalo em C++ é o idioma erase-remove que consiste em duas funções - std::erase
(função embutida para a maioria dos contêineres STL) e std::remove
(a parte da biblioteca de algoritmos STL). Observe que ambos estão encadeados para conduzir a operação de remoção no objeto fornecido. A função std::remove
leva dois iteradores para especificar o intervalo e o terceiro argumento para denotar o valor do elemento a ser removido. Nesse caso, especificamos diretamente um caractere de espaço, mas qualquer caractere pode ser especificado para remover todas as suas ocorrências na string.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str = " Arbitrary str ing with lots of spaces to be removed .";
cout << str << endl;
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
cout << str << endl;
return EXIT_SUCCESS;
}
Resultado:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.
Por outro lado, o usuário também pode passar o predicado unário como o terceiro argumento para o algoritmo std::remove
. O predicado deve ser avaliado como um valor booleano
para cada elemento e, quando o resultado for true
, os valores correspondentes são removidos do intervalo. Assim, podemos utilizar uma função isspace
predefinida que verifica vários caracteres de espaço em branco como espaço - " "
, nova linha - \n
, tabulação horizontal - \t
e vários outros.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string str = " Arbitrary str ing with lots of spaces to be removed .";
cout << str << endl;
str.erase(std::remove_if(str.begin(), str.end(), isspace), str.end());
cout << str << endl;
return EXIT_SUCCESS;
}
Resultado:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.
Use a função personalizada para remover espaços de string em C++
Observe que todas as soluções anteriores modificaram o objeto string original, mas às vezes, pode ser necessário criar uma nova string com todos os espaços removidos. Podemos implementar uma função personalizada usando o mesmo idioma erase-remove
, que leva a referência da string e retorna um valor analisado para ser armazenado em um objeto string separado. Este método também pode ser modificado para suportar outro parâmetro de função que irá especificar o caractere que precisa ser removido.
#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(tmp.begin(), tmp.end(), ' '), tmp.end());
return tmp;
}
int main() {
string str = " Arbitrary str ing with lots of spaces to be removed .";
cout << str << endl;
string newstr = removeSpaces(str);
cout << newstr << endl;
return EXIT_SUCCESS;
}
Resultado:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.
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