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
Version imprimable
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:
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).
erase-remove, comme d'hab ?
Oui, ou même en place en utilisant le même algo que remove_if.
QQchose comme ça :
Code:
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²)
Il est en O(n2) et il est faux aussi, il ne va pas marcher avec deux espaces consécutifs.