2010-11-17 9 views
3

J'ai un std::string A Je dois trouver en elle chaîne B avec un contenu comme bla-bla-bla et le remplacer par autre chaîne C comme abcdefg et si B n'a pas été trouvé juste mis C au début de A.Comment trouver une chaîne dans une chaîne et la remplacer?

Comment faire une telle chose?

+0

il est pleinement parti lorsque vous avez des URL les et que vous voulez faire utiliser quelque chose comme « rtmp: // » au lieu de 'http: //' et bien sûr vous plus récent savoir si 'http: //'.) – Rella

+3

Avez-vous regardé string :: replace et string :: find? – Cascabel

Répondre

4
void replace_or_merge(std::string &a, const std::string &b, const std::string &c) 
{ 
    const std::string::size_type pos_b_in_a = a.find(b); 
    if(pos_b_in_a == std::string::npos) { 
    a.insert(0, c); 
    } 
    else { 
    a.replace(pos_b_in_a, b.length(), c); 
    } 
} 
+1

+1/semble logique, mais mieux vaut passer b et c comme 'const std :: string &' –

+0

@Tony Oui, vous avez raison. J'ai modifié la déclaration –

2
A.replace(str.find(B), B.length(), C); 

Vous pouvez ajouter le contrôle d'erreur ;-)

Questions connexes