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 :

iterator.end() ne detecte pas fin de la string


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 9
    Points
    9
    Par défaut iterator.end() ne detecte pas fin de la string
    Bonjour,

    J'essaye de lire une chaîne de caracteres, et je fais un test pour détécter la fin de la chaîne grace à un itérateur (iterator.end() ) mais le programme ne détécte pas la fin de la chaîne.

    J'ai pourtant utilisé iterator comme indiqué sur tous les sites internet... J'ai encore fait une betise ??

    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
    16
    17
    18
    19
    20
    21
    #include <string>
    #include <iostream>
    #include <ctype.h>
    int main()
    {
     std::string paragraphe="un deux trois.";
     std::string::iterator iter; 
     iter=paragraphe.begin();
     int j=0;
     
     while ( iter!= paragraphe.end()) 
      {
           //si le caractere est imprimable
           if(!iscntrl(paragraphe[j]))
           {  std::cout<<paragraphe[j];
              j++;
           }
      }
     system("PAUSE");
     return EXIT_SUCCESS;
    }

  2. #2
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Il semblerait que tu oublies d'incrémenter ton itérateur

    En plus tu n'as pas besoin d'utiliser une variable j, tu dois pouvoir utiliser l'itérateur pour accéder au contenu de la chaîne si je ne m'abuse...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ( iter!= paragraphe.end()) 
    {
           //si le caractere est imprimable
           if(!iscntrl(*iter)) std::cout<<(*iter);
           iter++;
    }
    A quoi te sert <ctype.h>? Si tu en as vraiment besoin, utilises plutôt <cctype> (même chose, mais pour le c++).

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    wah...bah ça en fait des betises, en effet...
    merci beaucoup pour ton aide !

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    J'ai tendance à préféer les for() pour ce genre de choses. Moins de risque d'oublier d'incrémenter.
    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 éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    J'utilise aussi les for pour ce genre de parcours, on dirait que c'est fait exprés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(iterator=conteneur.begin(); iterator!=conteneur.end(); iterator++){
       //traitements
    }

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte
    J'ai tendance à préféer les for() pour ce genre de choses. Moins de risque d'oublier d'incrémenter.
    Tu n'utiliserais pas std::copy pour copier un itérateur filtrant de boost vers un ostream_iterator?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Dans ce cas là ? J'utilise copy_if.
    Je n'ai pas encore essayé les itérateurs filtrant j'avoue.
    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...

  8. #8
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Vous voudriez pas donner des exemples de ce dont vous parlez?
    Ça peut servir à tous ceux qui ne connaissent pas

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte
    Dans ce cas là ? J'utilise copy_if.
    Il me semblait bien que je l'avais vu quelque part, mais je ne l'avais trouve ni dans boost (ou j'ai mal regarde, je sais) ni dans la norme.

    Je n'ai pas encore essayé les itérateurs filtrant j'avoue.
    J'en ai ecrit a la main, sans attendre boost.

    Je n'ai en fait utilise boost que dans un contexte prive et d'experimentation, au boulot nous utilisons un peu trop de compilateurs avec un support incertain de la norme pour envisager d'essayer
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par MatRem
    Vous voudriez pas donner des exemples de ce dont vous parlez?
    Ça peut servir à tous ceux qui ne connaissent pas
    regarde le contenu de <algorithm> et dans boost, les sections Iterators, Algorithms, Function Objects and higher-order programming, Template Metaprogramming. Ca devrait t'occuper les prochaines annees.

    En fait, on fait allusion a des techniques utilisees dans des langages fonctionnels, mais que je n'arrive pas a considerer comme naturelles quand je fais du C++ (ce n'est pas un manque de familiarite, ce sont celles que j'utilise quand j'ecris dans un langage fonctionnel).

    Dans l'exemple on devrait pouvoir arriver a une ecriture du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy_if(ostream_iterator(cout), v.begin(), v.end(). !iscntrl(_1));
    en utilisant toutes les ressources que j'ai donnee. Si tu te limites a certaines, ca devient plus complique. De toute maniere, pour etre sur du resultat, il faut bien comprendre a la fois les templates et la gestion de la surchage, deux des points les plus compliques du C++ (je ne maitrise les details ni de l'un, ni de l'autre).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #11
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    merci

    L'écriture est plus condensée, c'est sur.
    Mais au niveau des performances y a t'il des différences?

    J'ai pas encore pris le temps d'utiliser boost, mais on dirait que c'est quand même bien intéressant...

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais au niveau des performances y a t'il des différences?
    C'est principalement de la méta-programmation, donc après compilation le code généré est exactement que ce que tu aurais écrit toi-même.

    Et puis pour ce genre de programme les performances sont-elles réellement importantes ? ...

    J'ai pas encore pris le temps d'utiliser boost, mais on dirait que c'est quand même bien intéressant...
    Très. Surtout que beaucoup de ses bibliothèques seront intégrées au prochain standard.

  13. #13
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Ce nouveau standard on en entend souvent parler, mais est ce quelqu'un sait quand il aboutira?

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par MatRem
    Ce nouveau standard on en entend souvent parler, mais est ce quelqu'un sait quand il aboutira?
    On veut le publier en 2009. Donc fin 2007 il devrait avoir des brouillons très proches de ce qui sera publié.

    Plus intéressant, quand est-ce qu'on aura les premiers compilateurs conformes... et quand est-ce qu'on pourra compter dessus?

    En ce qui concerne C++98, le premier compilateur conforme fut disponible au public en 2003. Et on ne peut toujours pas compter sur le fait d'avoir un compilateur conforme mais le gros de la norme est généralement implémenté; les problèmes principaux étant la gestion d'export et la gestion de la recherche des noms en deux phases. La situation est relativement satisfaisante.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  15. #15
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    On veut le publier en 2009
    C'est que tu travailles sur la norme?


    On peux encore utiliser boost, alors en attendant ce standard

  16. #16
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Il me semblait bien que je l'avais vu quelque part, mais je ne l'avais trouve ni dans boost (ou j'ai mal regarde, je sais) ni dans la norme.
    Je l'avais croisé dans le MEC++ pour la première fois. Et une recherche sur boost::copy_if (qui n'existe pas) pointe sur une implémentation accompagnée d'un petit commentaire comme quoi copy_if aurait été oublié dans le standard de 98 -- une inattention de ce que j'ai compris.

    Citation Envoyé par Jean-Marc.Bourguet
    Je n'ai en fait utilise boost que dans un contexte prive et d'experimentation, au boulot nous utilisons un peu trop de compilateurs avec un support incertain de la norme pour envisager d'essayer
    Un projet qui "vient" de démarrer nous permet de l'utiliser


    Sinon, côté perf, c'est effectivement pareil que le même code écrit à la main et directement (il peut ne même pas y avoir le coût d'un appel de fonction). Plus quelques mineurs avantages (p/r aux implémentations manuelles) : cont.end() n'est évalué qu'une seule fois ; pour les quelques cas où cela fait encore une différence la pré-incrémentation est utilisée. J'ai un squelette de code qui fait que j'ai les mêmes "optims" en quelques touches frappées sur mon clavier.

    Je préfère ces écritures quand ce que je réalise des traitements simples qui tiennent en moins d'une ligne de boost::bind. Au delà, je développe rapidement.

    Pour le C++09, les USENautes sont globalement au courant. De même que d'autres ici même. Ca fait parti de l'actu C++.
    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...

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Luc Hermitte
    Je l'avais croisé dans le MEC++ pour la première fois. Et une recherche sur boost::copy_if (qui n'existe pas) pointe sur une implémentation accompagnée d'un petit commentaire comme quoi copy_if aurait été oublié dans le standard de 98 -- une inattention de ce que j'ai compris.
    Il est dans mpl.

    Un projet qui "vient" de démarrer nous permet de l'utiliser
    Nos projets démarrent avec la nécessité de tourner sur une dizaine de cibles (on compte 32/64 bits comme deux cibles), avec des compilateurs imposés et en récupérrant au minimum un ou deux millions de lignes de code, au maximum, c'est en s'intégrant dans des systèmes avec plusieurs dizaines de millions de lignes de code.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #18
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par MatRem
    C'est que tu travailles sur la norme?
    Non, je ne peux pas réellement prétendre que je travailles dessus J'ai juste l'oportunité de voir les choses d'un peu plus près que ce qui est publiquement disponible (par exemple à http://www.open-std.org/jtc1/sc22/wg21/) mais ce n'est pas grand chose... toute l'info que j'ai donnée est disponible d'ailleurs.

    On peux encore utiliser boost, alors en attendant ce standard
    Même après.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  19. #19
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    En parlant de open-std.org, j'ai essayé de chercher des documents qui présentent la norme du c++ 98 et de sa mise à jour 2003.

    Je n'ai trouvé aucun document de synthèse, est ce que quelqu'un aurait des liens?

  20. #20
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par MatRem
    En parlant de open-std.org, j'ai essayé de chercher des documents qui présentent la norme du c++ 98 et de sa mise à jour 2003.

    Je n'ai trouvé aucun document de synthèse, est ce que quelqu'un aurait des liens?
    Pour la version définitive et imprimée:

    http://www.amazon.fr/exec/obidos/ASI...130112-2724202

    Pour ce que je pense être le dernier brouillon public:

    http://www.open-std.org/jtc1/sc22/wg...ers/2001/n1316
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Detecter la fin de l'exécution d'un script
    Par NoisetteProd dans le forum ASP
    Réponses: 3
    Dernier message: 22/08/2006, 11h34
  2. detection evenement fin d'execution
    Par suckthewindow dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/07/2006, 18h32
  3. detection de fin de session
    Par elan_gi dans le forum Langage
    Réponses: 18
    Dernier message: 23/06/2006, 12h39
  4. [Débutant][ThreadGroup] Détecter la fin de toutes les tâches
    Par onlytoine dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 19/09/2005, 10h47
  5. Detecter la fin d'un ecran de veille
    Par fredderf dans le forum MFC
    Réponses: 12
    Dernier message: 13/06/2005, 17h08

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