vocales una quitar primer para obtener net funcion extraer espacios eliminar ejemplos caracteres caracter cadena blanco c++ stl

una - Eliminar espacios de std:: string en C++



quitar el primer caracter de una cadena vb net (12)

¿Cuál es la forma preferida de eliminar espacios de una cadena en C ++? Podría recorrer todos los personajes y construir una nueva cuerda, pero ¿hay una mejor manera?



De gamedev

string.erase(std::remove_if(string.begin(), string.end(), std::isspace), string.end());


Hola, puedes hacer algo como eso. Esta función borra todos los espacios.

string delSpaces(string &str) { str.erase(std::remove(str.begin(), str.end(), '' ''), str.end()); return str; }

Hice otra función, que elimina todos los espacios innecesarios.

string delUnnecessary(string &str) { int size = str.length(); for(int j = 0; j<=size; j++) { for(int i = 0; i <=j; i++) { if(str[i] == '' '' && str[i+1] == '' '') { str.erase(str.begin() + i); } else if(str[0]== '' '') { str.erase(str.begin()); } else if(str[i] == ''/0'' && str[i-1]== '' '') { str.erase(str.end() - 1); } } } return str; }


Me temo que es la mejor solución que se me ocurre. Pero puede usar reserve () para preasignar la memoria mínima requerida por adelantado para acelerar un poco las cosas. Terminará con una nueva cadena que probablemente será más corta, pero que ocupará la misma cantidad de memoria, pero evitará las reasignaciones.

EDITAR: Dependiendo de su situación, esto puede incurrir en menos gastos generales que los caracteres de confusión alrededor.

Debe probar diferentes enfoques y ver qué es lo mejor para usted: es posible que no tenga problemas de rendimiento.


Para recortar, use algoritmos de cadena de refuerzo :

#include <boost/algorithm/string.hpp> using namespace std; using namespace boost; // ... string str1(" hello world! "); trim(str1); // str1 == "hello world!"


Puede usar esta solución para eliminar un char:

#include <algorithm> #include <string> using namespace std; str.erase(remove(str.begin(), str.end(), char_to_remove), str.end());


Si quieres hacer esto con una macro fácil, aquí hay una:

#define REMOVE_SPACES(x) x.erase(std::remove(x.begin(), x.end(), '' ''), x.end())

Esto supone que ha hecho #include <string> por supuesto.

Llámalo así:

std::string sName = " Example Name "; REMOVE_SPACES(sName); printf("%s",sName.c_str()); // requires #include <stdio.h>


Utilicé el siguiente trabajo por mucho tiempo, sin estar seguro de su complejidad.

s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return (f=='' ''||s=='' '');}),s.end());

cuando quieras eliminar el carácter '' '' y algunos por ejemplo - usa

s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return ((f=='' ''||s=='' '')||(f==''-''||s==''-''));}),s.end());

del mismo modo solo aumenta el || si la cantidad de caracteres que quieres eliminar no es 1

pero como lo mencionaron otros, el borrado de borrar idioma también parece estar bien.


Lo mejor que puedes hacer es usar el algoritmo remove_if y isspace:

remove_if(str.begin(), str.end(), isspace);

Ahora el algoritmo en sí no puede cambiar el contenedor (solo modifica los valores), por lo que en realidad mezcla los valores y devuelve un puntero al lugar donde debería estar ahora el extremo. Entonces, debemos llamar a string :: erase para modificar realmente la longitud del contenedor:

str.erase(remove_if(str.begin(), str.end(), isspace), str.end());

También debemos tener en cuenta que remove_if hará como máximo una copia de los datos. Aquí hay una implementación de ejemplo:

template<typename T, typename P> T remove_if(T beg, T end, P pred) { T dest = beg; for (T itr = beg;itr != end; ++itr) if (!pred(*itr)) *(dest++) = *itr; return dest; }


std::string::iterator end_pos = std::remove(str.begin(), str.end(), '' ''); str.erase(end_pos, str.end());


string removespace(string str) { int m = str.length(); int i=0; while(i<m) { while(str[i] == 32) str.erase(i,1); i++; } }


string replaceinString(std::string str, std::string tofind, std::string toreplace) { size_t position = 0; for ( position = str.find(tofind); position != std::string::npos; position = str.find(tofind,position) ) { str.replace(position ,1, toreplace); } return(str); }

usarlo:

string replace = replaceinString(thisstring, " ", "%20"); string replace2 = replaceinString(thisstring, " ", "-"); string replace3 = replaceinString(thisstring, " ", "+");