Remover espaços da string em C++

Jinku Hu 12 outubro 2023
  1. Use o idioma erase-remove para remover espaços de string em C++
  2. Use a função personalizada para remover espaços de string em C++
Remover espaços da 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.
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