IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Remplacer un caractère d'un string par d'autres


Sujet :

C++

  1. #1
    splash68
    Invité(e)
    Par défaut Remplacer un caractère d'un string par d'autres
    Bonjour,

    je souhaite dans une chaine de caractère de type string, remplacer toutes les occurrences d'un caractère par d'autres caractères. Par exemple si on a un string :

    string str(" aze\rty");

    il faudrait : "aze\\rty"

    en fait je voudrais doubler certain caractères dans des string. Le problème que j'ai, c'est que je voudrais le faire pour toutes les occurrences.
    Pour le moment je fais :
    pos = str.find_first_of("\");
    str.insert(pos,"\");

    et bien sur cela rajoute bien un deuxième \ au bon endroit. Mais si j'ai plusieurs fois le caractère \ dans la string je suis un peu bloquer.


    merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780

  3. #3
    splash68
    Invité(e)
    Par défaut
    j'ai effectivement déjà essayé, mais cela ne me remplace que la première occurrence du caractère.
    Si dans le string, il y a plusieurs fois le même caractère, ca ne vas pas. Il faut utiliser un iterateur peut-être ?

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Quand j'ai la flemme, j'utilise boost :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s = "aze\rty";
    boost::replace_all(s, "\", "\\");
    Mais sinon, une simple boucle for devrait largement suffire...
    (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    std::string doubleCaractere(const std::string& s, char c)
    {
       std::string ret;
       for(int i = 0 ; i < s.size() ; i++)
       {
          ret += s[i];
          if(s[i] == c)
             ret += c;
       }
       return ret;
    }

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par splash68 Voir le message
    j'ai effectivement déjà essayé, mais cela ne me remplace que la première occurrence du caractère.
    Si dans le string, il y a plusieurs fois le même caractère, ca ne vas pas. Il faut utiliser un iterateur peut-être ?
    non tu as mal lu, il faut redonner la position où tu t'es arrêté au find en paramètre. Ce n'est pas un find_first_of mais juste find


    Sinon oui moi aussi j'utilise boost.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Ah zut, c'est dans cette discussion-ci que j'aurais dû répondre.

    J'ai donné la réponse toute faite à la fin de l'autre discussion
    http://www.developpez.net/forums/d89...actere-string/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define STR_LEN(s) (s),(sizeof(s)-1)
     
    void FindAndReplace(std::string & s,const char *os,unsigned oslen,const char *ns,unsigned nslen)
    {
    	if (os==0 || oslen==0)
    		return;
    	for (std::string::size_type pos=0;(pos=s.find(os,pos,oslen))!=s.npos;pos+=nslen)
    		s.replace(pos,oslen,ns,nslen);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/05/2011, 15h00
  2. Remplacer les Caractères Null (Ascii 00) par autre chose
    Par wayak3 dans le forum Développement
    Réponses: 6
    Dernier message: 29/05/2008, 10h47
  3. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  4. remplacer un caractère dans un string
    Par ryoussef19 dans le forum C++/CLI
    Réponses: 10
    Dernier message: 28/08/2007, 13h41
  5. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo