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 mots dans une chaine de caractère


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Extraction mots dans une chaine de caractère
    Salut tout le monde, J'ai une application qui prend en entrée une chaine de caratère de la forme " {1245,3654,48755,45879,987456} ",
    Est ce que quelqu'un peut m'aider et me donner une idée comment je fais pour extraire ces nombres.
    J'ai uitlisé strtok mais ça n'a pa marché.
    Merci de votre aide précieuse.

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    strtok est une solution tu dois pas l utiliser comme il faut, peut on voir ce que tu a fait ?

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Peux tu montrer ton code pour qu'on puisse voir ce qui ne va pas ?

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Merci de votre collaboration, j'ai fait plus de recherche et j'ai aboutit au code suivant pour la chaine {11966, 4871, 13714,4561}
    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
     
    //recherche des éléement ds la liste
    	size_t size = 0;
    	const char* delim = ",";
    	char* strtmp;
    	QString str;
    	QStringList listSpecialite;
     
    	if (list_specialite != NULL)
    	{
    		int start = 0;
    		int end = 0;
    		size_t length = 0;
    		const char *t = NULL;
     
    		while ((t = strstr (&list_specialite[start], delim)))
    		{
    			end = t - list_specialite;
    			length = end - start;
    			if (length > 0)
    			 {
    				size++;
     
    				strncpy (strtmp, &list_specialite[start], length);
    				str = strtmp;
    				listSpecialite.append(str);
    			}
     
    			start = end + 1;
    		}
    	}
    Avec ce bout de code, ça marche mais j'ai un pb pour le dernier élément que je n'ai pas pu le récupérer. En plus est ce qu'il y un risque de mémoire dans ce que j'utilise. Juste pour l'information que je suis en train de développer une api en C et que j'utilise avec C++/Qt c'est pour cela que je suis en train de stocker les résultat dans liste.
    Cordialement.

  5. #5
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    re,

    j ai pas de compilo Qt sous la main mais en C standard
    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
     
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
     
     
    int main()
    {
        //recherche des éléement ds la liste
    	const char delim[] = ",";
    	char phrase[] = "42,4242,424242,42,4242";
    	char* token = NULL;
     
    	token = strtok( phrase, delim );
     
    	printf( "1er token => '%s'\n", ( token == NULL ) ? "NULL" : token );
     
    	while( ( token = strtok( NULL, delim ) ) != NULL )
    	{
                  printf( "autre token => '%s'\n", ( token == NULL ) ? "NULL" : token );
    	}
     
    	return EXIT_SUCCESS;
    }
    ce bout de code t affiche tout les tokens

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    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
    #include <stdio.h>
     
    #define CHAINE  " {1245,3654,48755,45879,987456} "
    #define PATTERN " {%d,%d,%d,%d,%d} "
     
    int main (void)
    {
       int tab[5];
       int ret = sscanf (CHAINE, PATTERN, tab, tab + 1, tab + 2, tab + 3, tab + 4);
     
       if (ret == 5)
       {
          unsigned int i;
          for (i = 0; i < sizeof tab / sizeof *tab; i++)
          {
             printf ("tab[%u] = %d\n", i, tab[i]);
          }
       }
       else
       {
          perror ("sscanf");
       }
     
       return 0;
    }

  7. #7
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Juste pour remercier infimiment de votre aide et collaboration. C'est largement suffisant et ça marche.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2015, 11h01
  2. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  3. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  4. [RegEx] trouver un mot dans une chaine de caractère
    Par starr dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 15h36
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

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