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 :

chaines de caractere


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Par défaut chaines de caractere
    Voila j'aimerai bien recuperer des elements ds une chaine de caractere..

    j'ai une chaine du genre...

    Monsieur_Martin_Gerard 30ans Marié

    j'aimerai en retirer ds des sous chaines l'information Martin et 30

    j'ai vu la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char seps[]   = " ,\t\n";
    char *token;
    token = strtok( string, seps );
    Mais ds celle ci les separateur ne peuvent etre que des caracteres et non une suite de caracteres, non?

    Que pui-s je utiliser comme fonction ds le genre?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Par défaut
    je vais essayer la fonction wcstok

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Regarde du côté de strstr: http://man.developpez.com/man3/strstr.3.php
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Par défaut
    en fait MARTIN n'est pas censé etre connu!

    j'ai plusieurs ligne du type

    Monsieur_Martin_Gerard 30ans Marié
    Monsieur_Paul_Gerard 32ans Marié
    Monsieur_Bastien_Gerard 30ans Divorcé

    Avec la fonction strstr il est necessaire de connaitre la chaine que l'on cherche, moi ce n'est pas mon cas je dois la retrouver en délimitant par
    Monsieur_ et _

    Je vais continuer de chercher mais si vs avez des idees....

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Regarde du cote de sscanf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(buffer, "%s_%s_%s %dans %s", s1, s2, s3, &age, s4);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Par défaut
    Voila ce qui marche avec juste des caracteres en guise de séparateur.

    Fournit par la doc.....

    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
    #include <string.h>
    #include <stdio.h>
     
    char string[] = "A string\tof ,,tokens\nand some  more tokens";
    char seps[]   = " ,\t\n";
    char *token;
     
    int main( void )
    {
       printf( "Tokens:\n" );
       /* Establish string and get the first token: */
       token = strtok( string, seps );
       while( token != NULL )
       {
          /* While there are tokens in "string" */
          printf( " %s\n", token );
          /* Get next token: */
          token = strtok( NULL, seps );
       }
    }
    Résultat

    Tokens: A string of tokens and some more tokensJ'aimerai faire pareil mais avec une chaine de caractere au lieu de caractere seul

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Regarde mon post au dessus du tien.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Par défaut
    j'ai pas tres bien compris comment utiliser sscanf
    tu peux m'aider?

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu lis une ligne du fichier et tu la met dans ta variable buffer apres tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(buffer, "%s_%s_%s %dans %s", s1, s2, s3, &age, s4);
    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char s1[50];
    char s2[50];
    ...
    int age;
    Et par exemple avec cet exemple
    Monsieur_Bastien_Gerard 30ans Divorcé

    Dans s1 tu aura Monsieur, dans s2 tu aura Bastien, dans s3 tu aura Gerard, dans age tu aura 30 et dans s4 tu aura Divorce

    Voila

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par beb30
    Voila j'aimerai bien recuperer des elements ds une chaine de caractere..

    j'ai une chaine du genre...

    Monsieur_Martin_Gerard 30ans Marié

    j'aimerai en retirer ds des sous chaines l'information Martin et 30
    On peut commencer par ça :
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int main(void)
    {
       char string[] = "Monsieur_Martin_Gerard 30ans Marié\n";
       char const seps[] = " _\n";
       char *token;
     
       for (token = strtok (string, seps); token != NULL; token = strtok (NULL, seps))
       {
          printf ("%s\n", token);
       }
       return 0;
    }
    Ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Monsieur
    Martin
    Gerard
    30ans
    MariÚ
    Pour extraire la valeur numérique codée décimale '30', tu passes "30ans' à strtol(), et elle va se débrouiller avec...

    Il y a d'autres façons de faire avec sscanf()... si le format d'entrée est suffisament récis et stable... Lire la doc...

    Si tu ne connais pas une fonction :
    • Cherche la doc de la fonction
    • Expérimente la à part
    Quand tu la maitrises, tu peux l'utiliser.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 13
    Dernier message: 13/06/2003, 14h13
  3. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58
  4. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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