Maison > développement back-end > C++ > Comment puis-je supprimer efficacement les espaces des chaînes C ?

Comment puis-je supprimer efficacement les espaces des chaînes C ?

Barbara Streisand
Libérer: 2024-12-17 20:07:15
original
565 Les gens l'ont consulté

How Can I Efficiently Remove Whitespace from C   Strings?

É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());
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal