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 :

Un string dans un tableau de deux dimensions...


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut Un string dans un tableau de deux dimensions...
    Bonjour,

    J'ai un Devoir à rendre en Algo et c'est en C++

    Alors voilà mon code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <iostream>
    #include <string>
    #include <cctype>
     
    using namespace std;
     
    const int nbMaxMotsClefs=10;
    const int tailleMaxMotClef=40;
     
    typedef
      struct
      {
        bool Tous; // si vrai, indique qu'on recherche tous les mots-clefs
                   // si faux, indique qu'on recherche au moins l'un des mots-clefs
        int nbMotsClefs; // nombre de mots clefs dans le tableau liste
        char liste[nbMaxMotsClefs][tailleMaxMotClef];
      } RechercheComplexe;
     
    void lireRechercheComplexe(RechercheComplexe &rech) // R
    {
      string s;
      int i=0,j=0;
     
      cout << "Rechercher tous les mots-clefs ou un seul : ";
      do
      {
        cin >> s;
      } while (s != "un" && s != "tous");
      if (s == "un")
        rech.Tous = false;
      else
        rech.Tous = true;
      cout << "Vos mots-clefs terminés par un point : ";
      getline(cin,s);
      while (s[i] != '.' && i<s.length())
      {
        if (s[i] != 32)
        {
          rech.liste[j][i]=s[i];
          i++;
        }
        else
        {
          rech.liste[j][i]='\0';
          i++;
          j++;
        }
      }
      rech.nbMotsClefs=j;
    } 
     
    int main()
    {
      RechercheComplexe recherchecomplexe;
      lireRechercheComplexe(recherchecomplexe);
      cout << recherchecomplexe.nbMotsClefs;
    }
    Alors le but de cette procédure est de demander à l'utilisateur si il souhaite rechercher dans une chaine de caractère un ou tous les mot-clefs qu'il tape par la suite. Les mot-clefs sont tapés l'un après l'autre avec un espace entre chaque et un point pour dire qu'il n'y a plus de mot-clefs.

    Le prob c'est que quand je lance le programme il marche bien mais quitte après la saisit des mot-clefs... Je sais pas d'où vient l'erreur... je galère depusi déjà un bon moment

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    Je signale que j'ai aussi un 0 ou un 1 ou rien qui s'affiche après la chaine de caractère : "Vos mots-clefs terminés par un point : " alors que je demande de rien n'afficher...

  3. #3
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Rajoute ça à la fin de ton code:

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    Oui je l'ai fais mais en faite il m'affiche pas "cout << recherchecomplexe.nbMotsClefs;". Il quitte direct après la saisit des mot-clefs

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 63
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    J'ai testé ton code et vu le comportement du programme, le flux d'entrée se retrouve apparemment dans un état invalide après la sortie de la boucle do-while. Pourquoi il se met dans un état invalide, j'ai oublié . Pour en sortir, il faut ajouter ces deux lignes après la lecture de la chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cin.ignore( numeric_limits<streamsize>::max(), '\n' ); // supprimer la ligne erronée dans le buffer
    cin.clear(); // effacer les bits d'erreurs
    cf la FAQ : http://c.developpez.com/faq/cpp/?pag...#SL_cin_verify

    L'autre solution est de remplacer cin >> s par getline(cin, s)

    Je signale que j'ai aussi un 0 ou un 1 ou rien qui s'affiche après la chaine de caractère : "Vos mots-clefs terminés par un point : " alors que je demande de rien n'afficher...
    Le 0 ou 1 affiché vient de la ligne 'cout << recherchecomplexe.nbMotsClefs; '

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    J'ai pas encore vu les deux lignes que tu m'indiques

    Pour le cin >> s , je comprend pas... j'ai mis getline(cin,s) déjà, le pire c'es que je l'ai fais au dessus et ça marche et là la saisit de la même façon ne marche plus ou c'est dans mon do while que ça bug ? Dans ce cas je comprends pas, car je fais juste copier des case de tableau dans un autre sans rien toucher d'autre ?

Discussions similaires

  1. Recherche dans un tableau associatif à deux dimensions
    Par General_Batton dans le forum Langage
    Réponses: 4
    Dernier message: 16/10/2014, 22h47
  2. Réponses: 2
    Dernier message: 30/08/2014, 11h20
  3. Stocker une string dans un tableau de char à deux dimensions
    Par faitor1 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/03/2014, 02h12
  4. Réponses: 6
    Dernier message: 06/02/2012, 20h47
  5. Réponses: 6
    Dernier message: 19/11/2008, 10h53

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