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 :

Question à propos d'une fonction


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut Question à propos d'une fonction
    Bonjour, je peux utiliser la fonction "transform" en recevant une string comme l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s="hello";
    transform(s.begin(), s.end(), s.begin(), toupper);
    Le problème est que je reçoit une string avec plusieurs mots. Je reçoit: "Bonjour j'ai une string et c'est tout". Je désire mettre en majuscule la chaîne "une" dans ma phrase. Comment faire cela? J'ai déjà les fonctions pour trouver le mot "une" mais je ne sais pas comment la changer avec la fonction transform.

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Si tu sais récupérer le début et la fin de la chaine une, il suffit de le donner à la fonction transform ? Je ne vois pas le problème...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    mais pourquoi qu'une fois que j'appelle ceci:
    transform (0, 4, sMot.begin(), toupper);

    Le compilateur me sort des erreurs....les premiers paramètres de ma fonction transform ne reçoivent pas d'int ?

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    La fonction transforme reçoit des itérateurs (ou pouvant passer pour) en guise des trois premiers arguments...

    Cela signifie que, si tu as une chaine str proche de "ceci est une chaine qui sera en partie transformée", et que tu veux transformer le "une" en majuscule, le code doit ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* il nous faut la position du premier caractère à transformer */
    size_t pos = str.find("une");
    /* Il existe deux versions de toupper, nous définissons un pointeur de
     * fonction pour préciser laquelle nous utilisons ici
     */
    int (*pf)(int)=std::toupper;
    /* le argument est un itérateur sur la position de départ de la source,
     * le second est un itérateur sur la position de fin de la source, 
     * le troisième est un itérateur sur la position de départ de la destination
     * le dernier est (un pointeur sur) la fonction unaire à effectuer
     *
     */
    std::transform(str.begin()+pos,str.begin()+(pos+3),str.begin()+pos, pf);
    /* juste pour montrer que ca s'est bien passé */
    std::cout<<str<<std::endl;
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    transform (0, 4, sMot.begin(), toupper);
    La fonction transforme, vu ce que tu avais ecrit avant, semble prendre en argument 3 iterator et une fonction.
    Ainsi , la ton compilateur va raler, car 0 et 4 ne sont pas des itérateurs.
    Pour faire un code un peu plus correct, je ferai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    transform(sMot.begin()+0, sMot.begin() + 4 , sMot.begin(), toupper);
    Normalement ceci mettra en majuscule les 4 premiers caractères.
    On peut faire des decalages directement sur les iterator car la stl est super bien prévu. Ainsi sMot.begin() + 4 donne l'iterator sur le quatrième quaractères. ( soit 4 après le debut )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [FTP] Question à propos de la fonction copy()
    Par Mo_Poly dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2008, 11h36
  2. Réponses: 30
    Dernier message: 27/03/2008, 15h02
  3. Question : Que renvoie une fonction ou un Sub
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2007, 14h36
  4. Question d'arrete une fonction
    Par etplus dans le forum C
    Réponses: 2
    Dernier message: 12/01/2007, 16h17
  5. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 12h21

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