c++ - leer - eliminar espacios en blanco en std:: string
eliminar un caracter en c (6)
Esta pregunta ya tiene una respuesta aquí:
- Eliminar espacios de std :: string en C ++ 12 respuestas
En C ++, ¿cuál es una manera fácil de convertir:
Este std :: string
/t/tHELLO WORLD/r/nHELLO/t/nWORLD /t
Dentro:
HELLOWORLDHELLOWORLD
En C ++ 11 puedes usar un lambda en lugar de usar std :: bind:
str.erase(
std::remove_if(str.begin(), str.end(),
[](char c) -> bool
{
return std::isspace<char>(c, std::locale::classic());
}),
str.end());
Podrías usar Boost.Algorithm ''s erase_all
#include <boost/algorithm/string/erase.hpp>
#include <iostream>
#include <string>
int main()
{
std::string s = "Hello World!";
// or the more expensive one-liner in case your string is const
// std::cout << boost::algorithm::erase_all_copy(s, " ") << "/n";
boost::algorithm::erase_all(s, " ");
std::cout << s << "/n";
}
NOTA: como se menciona en los comentarios: trim_copy
(o sus primos trim_copy_left
y trim_copy_right
) solo eliminan los espacios en blanco desde el principio y el final de una cadena.
Recorrerlo carácter por carácter y usar string::erase()
debería funcionar bien.
void removeWhitespace(std::string& str) {
for (size_t i = 0; i < str.length(); i++) {
if (str[i] == '' '' || str[i] == ''/n'' || str[i] == ''/t'') {
str.erase(i, 1);
i--;
}
}
}
Si C ++ 03
struct RemoveDelimiter
{
bool operator()(char c)
{
return (c ==''/r'' || c ==''/t'' || c == '' '' || c == ''/n'');
}
};
std::string s("/t/tHELLO WORLD/r/nHELLO/t/nWORLD /t");
s.erase( std::remove_if( s.begin(), s.end(), RemoveDelimiter()), s.end());
O use C ++ 11 lambda
s.erase(std::remove_if( s.begin(), s.end(),
[](char c){ return (c ==''/r'' || c ==''/t'' || c == '' '' || c == ''/n'');}), s.end() );
PD. Se usa el borrado de lenguaje
Simple combinación de std::remove_if
y std::string::erase
.
Versión no totalmente segura.
s.erase( std::remove_if( s.begin(), s.end(), ::isspace ), s.end() );
Para una versión más segura reemplace ::isspace
con
std::bind( std::isspace<char>, _1, std::locale::classic() )
(Incluir todos los encabezados relevantes)
Para una versión que funciona con tipos de caracteres alternativos, reemplace <char>
con <ElementType>
o cualquiera que sea su tipo de carácter con plantilla. Por supuesto, también puede reemplazar la configuración regional por otra diferente. Si lo hace, tenga cuidado de evitar la ineficiencia de recrear la faceta de la configuración regional demasiadas veces.
En C ++ 11 puede convertir la versión más segura en una lambda con:
[]( char ch ) { return std::isspace<char>( ch, std::locale::classic() ); }
c ++ 11
std::string input = "/t/tHELLO WORLD/r/nHELLO/t/nWORLD /t";
auto rs = std::regex_replace(input,std::regex("//s+"), "");
std::cout << rs << std::endl;
/ tmp ❮❮❮ ./play
HELLOWORLDHELLOWORLD