2016-11-30 1 views
0

Je veux ajouter un préfixe simple à une liste de chaînes:C++/boost: appliquer un préfixe à une liste de chaînes

Input: "a, b, c, d, e" 
Output: ":a, :b, :c, :d, :e" 

Y at-il bibliothèque Boost déjà mis en place pour ce genre d'opérations? ajouter des préfixes ou même appliquer une opération boost::format à une séquence de chaînes?

J'ai recherché sur la bibliothèque boost::algorithm::string mais je n'ai rien trouvé. Bien sûr, je pourrais le résoudre simplement avec std::for_each ou tout autre moyen, mais je veux savoir s'il y a quelque chose déjà fait.

+0

Comment ces chaînes stockées? c'est une liste ? – Rama

+0

'std :: vector ' En fait, même si 'boost' et' std' ne pensent qu'à des plages ou à des itérateurs, je pense que le conteneur spécifique n'a pas d'importance ici. –

+1

Votre entrée est-elle une chaîne comme dans votre exemple ou un conteneur de chaînes? – mkaes

Répondre

2

Je suppose que vous avez un conteneur avec des chaînes et dans chacune de ces chaînes doit être préfixé: Peut-être comme ceci:

std::for_each(v.begin(), v.end(), [](auto& s){ s.insert(0, ":");}); 

ou si C++ 11 est aucune option comme ceci:

string& (string::*FP)(size_t pos, const string& str) = &string::insert; 
std::for_each(v.begin(), v.end(), std::bind(FP, std::placeholders::_1, 0, ":")); 

Ce préfixera chaque élément dans votre récipient avec un :.

Un exemple complet qui au moins produire la sortie dans votre exemple serait comme ceci:

int main() { 
    std::vector<std::string> v; 
    v.push_back("a"); 
    v.push_back("b"); 
    v.push_back("c"); 
    v.push_back("d"); 
    v.push_back("e"); 
    std::for_each(v.begin(), v.end(), [](auto& s){ s.insert(0, ":");});  
    for(const auto& s : v) 
    { 
     std::cout << s << ", "; 
    } 
    return 0; 
}