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 :

Extraction des éléments d'une chaine de caractères


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Par défaut Extraction des éléments d'une chaine de caractères
    Bonjour,

    J'ai une petite question: comment peut-on extraire les différents morceaux d'une chaine de caractère un à un ?
    J'aimerais en fait extraire tous les "digits" d'une chaine de caractère du type ne comportant que des chiffres ("12345678987654321" par exemple) et les mettre dans un tableau d'entiers.

    Comment qu'on fait ?

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Extraire un caractère de fait par l'opérateur []

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s = "Salut";
    char c = s[3]; // c == 'u'
    Interpréter une chaîne pour en extraire un entier se fait à l'aide d'ostringstream (cf la faq).

    Là, tu veut interpréter un caractère unique, aussi il y a plus rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int interprete(char c)
    {
      switch (c)
      {
      case '1' : return 1;
      case '2' : return 2;
      ....
      }
    }
    Tu pourras tomber sur du code comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int interprete(char c)
    {
      return c - '0';
    }
    Mais ce genre de code suppose que les différents chiffres sont codés de manière continue dans la table de caractères, ce qui n'a rien de garanti.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Mais ce genre de code suppose que les différents chiffres sont codés de manière continue dans la table de caractères, ce qui n'a rien de garanti.
    Je crains que si. A ma connaissance la table de caractère utilisée pour les chars en C/C++ doit au minimum supporter l'ASCII pour que ce soit standard, et comme les chiffres font partie d'ASCII,... De toutes façons si tu veux être sur stringstream le fait à ta place, avec un mode de fonctionnement implementation dependent supposé fournir toujours le même résultat.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le standard cite 96 caractères que toute implémentation se doit de supporter (le basic source character set). Il ne précise pas comment ces caractères se situent les uns par rapport aux autres. Ensuite, il définit le basic execution character set :

    Citation Envoyé par Le standard 2.2.3.
    The basic execution character set and the basic execution widecharacter
    set shall each contain all the members of the basic source character set, plus control characters representing alert, backspace, and carriage return, plus a null character (respectively, null wide character), whose representation has all zero bits.
    For each basic execution character set, the values of the members shall be nonnegative and distinct from one another. The execution character set and the execution widecharacter set are supersets of the basic execution character set and the basic execution widecharacter set, respectively. The values of the members of the execution character sets are mplementationdefined, and any additional members are localespecific.
    C'est ce jeu de caractères qui compte en l'occurrence, et là encore je ne vois aucune référence à quelques relations que ce soit par exemple entre '1' et '2'. A moins qu'il y ait des contraintes supplémentaires causées par la compatibilité C (dont je ne possède pas la norme), je maintiens donc mon affirmation. Même s'il est très probable que ça marche sur toutes les machines modernes.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. [Tableaux] Extraire des mots d'une chaine de caractères
    Par pratiquement dans le forum Langage
    Réponses: 5
    Dernier message: 24/01/2008, 09h20
  2. [DOM] Rajouter des éléments à l’aide de chaine de caractère
    Par loic911 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 05/04/2007, 16h14
  3. extraire des entiers d'une chaine de caractère
    Par 18Marie dans le forum Langage
    Réponses: 9
    Dernier message: 10/08/2006, 11h17
  4. [MySQL] extraire des nombre d'une chaine de caractères et addition
    Par Yotho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/03/2006, 16h54
  5. Réponses: 9
    Dernier message: 17/01/2003, 11h45

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