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 :

[debutant C++] Extraire un caractère d'une chaîne


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut [debutant C++] Extraire un caractère d'une chaîne
    Bonjour, je souhaiterais retranscrire mon algo en c++ mais je ne sais pas quelle fonction utilisé... Voici ce que je veux faire :

    valeurCarEntier=extraire(codeEanSaisi,placeCar,1)

    Ma variable valeurCarEntier doit recevoir depuis la chaine codeEanSaisi le caractère situé à la place placeCar

    Une solution?

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    si tu veux a partir d'une string récuperer un char dont tu connais la position, il te suffit de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    std::string s = "blabla"; //exemple de chaine
     
    char c = s[2]; // c vaut 'a' (la numérotation de position commence à 0)
    si ce n'est pas ce que tu voulais savoir, il faut plus de précision

  3. #3
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    Je vais tester çca mais à quoi correspond std::string?

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    std::string c'est la chaine de caractères standard du c++.

    Je t'invite a lire les cours sur le c++ dans le site, ça expliquera bien mieux les choses que moi.

  5. #5
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    Merci, je n'avais pas pensé à traiter ma chaine de caractère sous forme de variable indicé

  6. #6
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    En fait ca ne marche pas, je travail avec des char* donc je ne peux pas accédé à une valeur en indiçant ma variable...

  7. #7
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    Voici ma fonction si ca peut paraitre plus clair :

    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
    char* calculerCleEan(char* codeEanSaisi)
    {
      //Déclaration et initialisation :
      int placeCar,codeEan,multiplicateur,somme;
      char valeurCarEntier;
      codeEan=0;
      somme=0;
      
      if ((strlen(codeEanSaisi))==12)
      {
        //On parcours tous les caractères pour avoir la somme :	
        for(placeCar=1; placeCar==12; placeCar++)
    	{	  
          valeurCarEntier=atoi(codeEanSaisi[placeCar]);
          if((placeCar%2)==0) 
          { multiplicateur=3; }
    	  else 
          { multiplicateur=1; }					
    	  somme=somme+(valeurCarEntier*multiplicateur);
     	}
    	//On calcul le code EAN 13 :
    	codeEan=(10-(somme%10));
      }
      return itoa(codeEan);
    }

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Citation Envoyé par Ministar
    Voici ma fonction si ca peut paraitre plus clair :

    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
    char* calculerCleEan(char* codeEanSaisi)
    {
      //Déclaration et initialisation :
      int placeCar,codeEan,multiplicateur,somme;
      char valeurCarEntier;
      codeEan=0;
      somme=0;
      
      if ((strlen(codeEanSaisi))==12)
      {
        //On parcours tous les caractères pour avoir la somme :	
        for(placeCar=1; placeCar==12; placeCar++)
    	{	  
          valeurCarEntier=atoi(codeEanSaisi[placeCar]);
          if((placeCar%2)==0) 
          { multiplicateur=3; }
    	  else 
          { multiplicateur=1; }					
    	  somme=somme+(valeurCarEntier*multiplicateur);
     	}
    	//On calcul le code EAN 13 :
    	codeEan=(10-(somme%10));
      }
      return itoa(codeEan);
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     codeEan=0;  // où sont les types ?
      somme=0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      if ((strlen(codeEanSaisi))==12) // faut il absolument que la chaine fasse 12 ?
    // Attention : strlen(null) plante. donc il faut faire un test sur ton paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for(placeCar=1; placeCar==12; placeCar++) // Une chaine commence à 0
    on devrait plutot voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (placeCar = 0; placeCar < 12; placeCar++)
    la condition du for peut se traduire par 'tant que la condition est vraie, je boucle'
    donc avec ce que tu as écrit, ça ne rentre pas du tout dans la boucle.

  9. #9
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    Pour les variables je les ai déclarées en temps qu'entier.

    Il faut absolument que ma chaine se compose de 12 caractères, c'est une condition indispensable.

    Pour le pour tu as raison, au niveau de la condition et merci pour le fait que ca commence à 0.

    Reste toujours le problème de l'extraction d'un caractère dans ma chaîne, je ne pense pas que ce soit bien compliqué mais je ne vois pas comment faire.

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ton code c'est du C, pas du C++.

  11. #11
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Citation Envoyé par Ministar
    Reste toujours le problème de l'extraction d'un caractère dans ma chaîne, je ne pense pas que ce soit bien compliqué mais je ne vois pas comment faire.
    je ne vois pas le probleme..

    valeurCarEntier=atoi(codeEanSaisi[placeCar]);
    si placeCar < 12 alors codeEanSaisi[placeCar] renvoie effectivement
    le char à la position indiquée.

    Une chaine de char est un comme un tableau : tu peux acceder à chacune des cases de ce tableau par son indice. tableau[i] vaut l'élément qui est à la place i du tableau.

  12. #12
    Membre confirmé Avatar de Ministar
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Par défaut
    J'ai une erreur "invalid conversion from 'char' to 'const char *'"...

  13. #13
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    ça c'est dû à la fonction atoi qui doit surement prendre un const char* en paramètre et tu lui passes un char.

    Pour avoir la valeur décimale d'un char, tu peux le faire à la main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char c;
    int res;
     
    c = codeEanSaisi[n]; // c est le char positionné en n de ta chaine.
     
    if (c >= '0' && c <= '9') // on vérifie que c'est bien un chiffre
      res = c - '0'; // distance entre '0' et c
    Maintenant, si tu tiens a utiliser atoi, tu le fait directement sur toute ta chaine sans en extraire les char un par un, mais apres avoir vérifié qu'elle ne contenait que des chiffres.

Discussions similaires

  1. Extraire un mot d'une chaîne de caractères
    Par persé dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 13/06/2013, 09h20
  2. [AIX] Extraire un nombre d'une chaîne de caractères
    Par Tohade dans le forum Shell et commandes POSIX
    Réponses: 5
    Dernier message: 23/04/2013, 08h23
  3. Réponses: 21
    Dernier message: 28/01/2008, 20h56
  4. Extraire une chaîne de caractères d'une chaîne
    Par dj-julio dans le forum Excel
    Réponses: 13
    Dernier message: 21/09/2007, 11h05
  5. [String] Remplacement caractères dans une chaîne
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2004, 11h15

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