Quelle est la meilleure façon de remplacer les caractères d'une chaîne?
Spécialement: p> Je veux remplacer toutes les virgules, les espaces et "|" avec des traits de soulignement. P> (J'ai accès à boost.) p> p>
7 Réponses :
La bibliothèque standard C ++ a accès également à ces fonctions sans utiliser de boost. Reportez-vous à la Remplacer la référence C ++ . Est-ce le meilleur moyen? Je suppose que c'est à la discussion. Pour remplacer plusieurs caractères / différents, vous devrez peut-être appeler remplacer plus d'une fois. exemple programme : p>
La méthode de remplacement remplace simplement un caractère (plage), pas toutes les occurrences de quelque chose, donc je dirais que ce n'est vraiment pas très utile pour cette tâche :)
Roger. C'est pourquoi j'ai dit qu'il doit être couru plus d'une fois. Que ce soit la meilleure méthodologie, c'est au développeur
En fait, vous pouvez rendre l'eau plus boueuse. String :: Remplacer code> est destiné à remplacer une seule plage avec une autre chaîne (ou caractères). OP veut remplacer uniquement les caractères uniques, donc au lieu de la méthode de remplacement de poids lourd que vous auriez pu pointer sur opérateur [], ce qui vous permet de "remplacer" la valeur des caractères simples.
EDIT: STROND> AS AS SPACE_C0WB0Y a déclaré, < Strong> Ancienne réponse: strong> p> Utilisez STD: : Remplacez avec STD :: Find_First_of P> p> replace_if code> est définitivement meilleur. Voici quelques Simple échantillon code:
boost :: remplaille_all (S, vieux, nouveau); p>
Comme les autres réponses indiquées, vous pouvez utiliser les différentes méthodes code> remplacer code>. Cependant, ces approches ont la possibilité de numériser la chaîne plusieurs fois (une fois pour chaque personnage). Je recommanderais de rouler votre propre méthode de remplacement, si vous vous souciez de la vitesse:
La méthode de remplacement d'une ligne est belle, mais votre solution fonctionne bien aussi
Une ligne Remplacer est définitivement plus agréable (je pense que vous aurez besoin de lignes au moins), mais ce n'est pas aussi efficace.
Je ne pense pas remplacer_if code> scannera la chaîne plusieurs fois.
J'écris cela, quand space_c0wb0y a posté sa réponse, quelle est la bonne réponse à votre question. Ceci est un peu plus compliqué, mais gère plus de remplaçants possibles.
(désolé, non compilé / testé) p>
Vous pouvez utiliser l'algorithme standard Vous pouvez écrire votre propre ou utiliser < Code> is_any_of code> dans les algorithmes de chaîne de Boost, donc: p> remplacer_if code>, à l'exception du prédicat est plutôt compliqué (à être exprimé en ligne avec la norme C ++ actuelle et sans lambda).
Est-ce une chaîne de classe de classe STD :: String ou un tableau de type de type avec une terminaison
\ 0 code>?
Je pense que les diverses réponses remplaçantes, par ex. Onclebens, sont bons. Un commentaire général, cependant: si vous remplacez des caractères pour obtenir quelque chose de sécurité pour une utilisation par ex. En tant que nom de fichier, vous devez énumérer des caractères autorisés et remplacer tout le reste, plutôt que l'inverse. De cette façon, vous ne serez pas surpris par une entrée étrange que vous n'aviez pas pensée.