Découper une chaîne

Présentation
Voici une fonction permettant de découper une chaîne selon un motif:
Détails
Catégories : Chaînes de caractères
Avatar de Luc Hermitte
Expert éminent sénior
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 23 janvier 2017




Avatar de Davidbrcz Davidbrcz - Rédacteur https://www.developpez.com
le 14/04/2011 à 19:42
Je me permets de donner un moyen d'appeler la fonction car ce n'est pas super clair
Code : Sélectionner tout
1
2
3
 
    std::vector<std::string> res; 
    split("foo bar nun chuck", std::back_inserter(res), " ");
Avatar de Joe Dralliam Joe Dralliam - Membre averti https://www.developpez.com
le 15/04/2011 à 11:58
Il pourrait être interressant de généraliser cette fonction pour toutes les basic_strings, non ?
Code : Sélectionner tout
1
2
3
4
5
6
 
template < class CharType, class OO, class Sep, class CTraits = std::char_traits<CharType>, class CAlloc = std::allocator<CharType> > 
OO split(std::basic_string<CharType, CTraits, CAlloc> const& source, OO dest, Sep separator) 
{ 
/* .... */ 
}
Avatar de Luc Hermitte Luc Hermitte - Expert éminent sénior https://www.developpez.com
le 15/04/2011 à 13:58
En fait, il manque les codes d'exemple qui avaient accompagné la définition dans le post d'origine: http://www.developpez.net/forums/d23...e/#post2842014

Sinon, oui, généraliser est une bonne idée.

Autre note, si on veut supporter plusieurs séparateurs (pour comprendre des formats comme: "x = 42"), il faut remplacer "p = p2 + 1" par:
Code c++ : Sélectionner tout
p = source.find_first_not_of(sep, p2 + 1);

PS: je l'ai pondu sans regarder ailleurs en même temps, au moment de répondre au post sur le forum, sauf émergence involontaire et spontanée du même code ailleurs et en même temps, considérez que c'est sous licence boost BSL.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique C++