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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    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 émérite 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
    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
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Par défaut
    wah...bah ça en fait des betises, en effet...
    merci beaucoup pour ton aide !

  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
    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 émérite 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
    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 confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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?

  7. #7
    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
    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...

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

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