262 votes

Supprimer les espaces de std :: string en C ++

Quelle est la méthode préférée pour supprimer des espaces d'une chaîne en C ++? Je pourrais parcourir tous les caractères et créer une nouvelle chaîne, mais y a-t-il une meilleure solution?

299voto

Matt Price Points 9674

La meilleure chose à faire est d'utiliser l'algorithme remove_if et isspace:

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

Maintenant l'algorithme lui-même ne peut pas changer le conteneur(seulement de modifier les valeurs), si elle a effectivement mélange les valeurs autour de, et renvoie un pointeur à l'endroit où la fin devrait être maintenant. Nous avons donc appeler string::erase pour réellement modifier la longueur de la caisse:

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

Il faut noter aussi que remove_if fera au plus une copie des données. Voici un exemple de mise en œuvre:

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;
}

133voto

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

43voto

rupello Points 3490

De gamedev

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

34voto

Nemanja Trifunovic Points 17239

Pouvez-vous utiliser Boost String Algo? http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/usage.html#id1290573

 erase_all(str, " ");
 

18voto

Roman Points 99

Pour le découpage, utilisez des algorithmes de chaîne de boost :

 #include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

// ...

string str1(" hello world! ");
trim(str1);      // str1 == "hello world!"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X