Éliminer les espaces des chaînes C
En C, supprimer les espaces d'une chaîne peut être une tâche courante. Une approche naïve impliquerait de parcourir les caractères et de construire manuellement une nouvelle chaîne. Cependant, il existe une solution plus efficace.
L'algorithme
Le C STL fournit un algorithme puissant appelé remove_if, qui peut être utilisé à cette fin. Cet algorithme prend une fonction de prédicat qui détermine si un élément doit être supprimé, puis supprime tous ces éléments du conteneur.
Dans ce cas, la fonction de prédicat qui nous intéresse est isspace, qui renvoie vrai pour les espaces. caractères et faux sinon. En appliquant Remove_if à une chaîne avec le prédicat isspace, nous pouvons éliminer tous les caractères d'espacement.
Implémentation
Une fois les caractères d'espacement supprimés à l'aide de Remove_if, nous devons réduisez la chaîne à sa nouvelle taille. Ceci peut être réalisé en utilisant la méthode d'effacement. Voici une implémentation complète de cette approche :
#include <algorithm> #include <string> void remove_spaces(std::string& str) { str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end()); }
Implémentation personnalisée de Remove_if
L'algorithme Remove_if de la STL est une fonction générique qui peut être appliquée aux conteneurs au-delà des cordes. Cependant, pour des cas d'utilisation spécifiques comme celui-ci, il peut être plus pratique d'implémenter une version personnalisée adaptée aux chaînes :
template <typename T> T remove_if(T beg, T end, std::function<bool(char)> pred) { T dest = beg; for (T itr = beg; itr != end; ++itr) { if (!pred(*itr)) { *(dest++) = *itr; } } return dest; }
Cette implémentation personnalisée imite le comportement de l'algorithme STL Remove_if et peut être utilisée spécifiquement pour les conteneurs basés sur des caractères comme std::string.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!