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?
Réponses
Trop de publicités?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;
}
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, " ");
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!"