una leer espacios eliminar caracteres caracter cadena blanco c++ string c++11 removing-whitespace

c++ - leer - eliminar espacios en blanco en std:: string



eliminar un caracter en c (6)

Esta pregunta ya tiene una respuesta aquí:

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