Attention, string::replace possède deux types d'arguments différents : soit un size_type ou bien un itérator.
Dans le cas ci-dessus, vous remplacez de la position 4 sur n caractères ( ici 5 ). C'est douteux.
Le mieux est de faire MaChaine.replace( MaChaine.find("rn"), 2, ""); // supprime CR + LF
qui a l'avantage de fonctionner même si la séquence recherchée n'est pas à la fin.
Si vraiment la vitesse est un critère déterminant, il y a MaChaine.resize(MaChaine.length()-2);
mais il faut être sûr que le CR LF soit réellement présent...
-- -Stan
Fabien LE LEZ
On Fri, 20 Jun 2008 18:50:12 +0200, stéphane SARAGAGLIA :
Qu'y a-t-il de plus élégant/simple/rapide pour supprimer une fin de chaine que ce qui suit ?
std::string MaChaine = "TOTOx0Dx0A"
Ici, tu veux enlever l'indicateur de fin de ligne (CRLF, rn). En pratique, tu risques de tomber sur des cas où l'indicateur de fin de ligne est simplement n ; aussi, je te conseille de gérer tous les cas d'un coup :
(Note : typiquement, on n'a qu'un seul 'r'. On pourrait donc remplacer "while" par "if". Mais bon, le while ne coûte pas cher et évite certains cas bizarres, comme un fichier converti deux fois de Unix vers Windows.)
On Fri, 20 Jun 2008 18:50:12 +0200, stéphane SARAGAGLIA :
Qu'y a-t-il de plus élégant/simple/rapide pour supprimer une fin de
chaine que ce qui suit ?
std::string MaChaine = "TOTOx0Dx0A"
Ici, tu veux enlever l'indicateur de fin de ligne (CRLF, rn).
En pratique, tu risques de tomber sur des cas où l'indicateur de fin
de ligne est simplement n ; aussi, je te conseille de gérer tous les
cas d'un coup :
(Note : typiquement, on n'a qu'un seul 'r'. On pourrait donc
remplacer "while" par "if". Mais bon, le while ne coûte pas cher et
évite certains cas bizarres, comme un fichier converti deux fois de
Unix vers Windows.)
On Fri, 20 Jun 2008 18:50:12 +0200, stéphane SARAGAGLIA :
Qu'y a-t-il de plus élégant/simple/rapide pour supprimer une fin de chaine que ce qui suit ?
std::string MaChaine = "TOTOx0Dx0A"
Ici, tu veux enlever l'indicateur de fin de ligne (CRLF, rn). En pratique, tu risques de tomber sur des cas où l'indicateur de fin de ligne est simplement n ; aussi, je te conseille de gérer tous les cas d'un coup :
(Note : typiquement, on n'a qu'un seul 'r'. On pourrait donc remplacer "while" par "if". Mais bon, le while ne coûte pas cher et évite certains cas bizarres, comme un fichier converti deux fois de Unix vers Windows.)