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

Langage C++ Discussion :

c++ les espaces ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut c++ les espaces ?
    hello

    je cherche a supprimer les espace d' une std::string

    j'ai bien tenter un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::string buff_space=" mastring  a la  c**  suite"
    size_t pos_space;
    pos_space=buff_space.find("  ");
    if (pos_space != string::npos)
    {
         buff_space.replace (pos_space,"  "," ");
    }
    sa plante avec un message qui est ilisible...
    j'ai aussi tester avec erase()
    mai visiblement je me rate quelque part
    merci d'avance

  2. #2
    Membre averti Avatar de Saintux
    Homme Profil pro
    Chercheur ( de travail )
    Inscrit en
    Janvier 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur ( de travail )
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 39
    Par défaut
    Salut,

    C'est à l'étape de compilation que ton code ne passe pas :


    De plus, avec ton code, tu ne remplacera qu'une seule occurrence. Pour tout remplacer, utilise une boucle.

    Voilà le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        std::string buff_space = " mastring  a la  c**  suite"; // Rajout d'un ;
        int pos_space;    // Utilisation d'un int à la place de size_t
        pos_space = buff_space.find("  ");
        while (pos_space != std::string::npos)     // Boucle + std::string::npos à la place de string::npos
        {
            buff_space.replace(pos_space, 2,"_");     // Utilisation correcte de la fonction replace()
            pos_space = buff_space.find("  ", pos_space);    // Pour l'occurrence suivante
        }
    PS: La prochaine fois met l'erreur même si elle est illisible

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Je suis d'accord avec la majeure partie de ce que Saintux dit, sauf pour la partie 'int à la place de size_t'. Sachant que la fonction 'find' de std::string retourne un size_t et que 'npos' est défini en tant que 'static const size_t', je ne comprends pas pourquoi il faudrait utiliser un int...
    Pour tout le reste, je suis d'accord sur ce qu'il t'a préconisé.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    "idiome erase-remove", ce n'est pas dans la FAQ ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par Luc Hermitte Voir le message
    "idiome erase-remove", ce n'est pas dans la FAQ ?
    Si, .

    MAT.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Tel que j'ai compris les besoins, l'idiome n'est pas directement aisément applicable ici, puisque le prédicat dépend non seulement du caractère courant, mais du précédent.

    J'ai tendance à bien aimer les algo de string de boost pour ce genre de chose (par exemple http://www.boost.org/doc/libs/1_44_0...place_all.html) mais je n'ai jamais testé ce que ça donnait en perfs. Mais ça ne peut que difficilement être plus mauvais que ce qui est proposé dans les solutions précédentes (indice : Une chaîne de taille N avec M occurrences de " " doit faire avec l'algo proposé un nombre d'opération de l'ordre de grandeur de N*M, alors qu'un nombre d'opérations de l'ordre de N existe).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Le '%' en SQL ne remplace pas les espaces...
    Par njac dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/09/2004, 17h10
  3. [String] comment virer tous les espaces vides ?
    Par Alec6 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 14h27
  4. Enlever les espaces
    Par Claythest dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2003, 14h43
  5. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44

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