slt, y a t-il une fonction en C++ qui permet de supprimer un ou plusieurs caractères d'une chaine à partir d'une position donnée? Merci
slt, y a t-il une fonction en C++ qui permet de supprimer un ou plusieurs caractères d'une chaine à partir d'une position donnée? Merci
Bonsoir,
La méthode replace de la classe string (lib std) s'y prête bien.
Il suffit de faire un replace par une chaîne vide.
En fait , je veux supprimer les blancs dans une chaine de caractère donc votre idée ne marche pas.
Bonjour,
l'idée de Nudger marche bien, tu remplace chaque " " par "": tu remplace chaque espace(les blancs) par une chaine vide.
Voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::string str= " aaaa aaaa bbbb "; for (int i=0; i<str.length(); i++) { if (str[i] == ' ') str.replace(i,1,""); }
Cet algorithme est particulièrement inefficace. Il est en O(n²) là où on pourrait être en O(n).
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
erase-remove, comme d'hab ?
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Oui, ou même en place en utilisant le même algo que remove_if.
QQchose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template <typename It, typename Pred> It my_remove_if(It first, It last, Pred pred) { It dest = first; for (; first != last; ++first) if (!pred(*first)) *dest++ = *first; return (dest); }
std::remove_if existe déjà ...
À la limite on pourrait produire une version qui recherche le premier non-match du prédicat pour ne commencer les affectations qu'à partir de ce moment là. (ce que fait la version de gcc en fait...)
@3aychoucha, replace est en O(n) donc dans une boucle tu passes à O(n²)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Il est en O(n2) et il est faux aussi, il ne va pas marcher avec deux espaces consécutifs.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager