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 :

parse d'une chaine de caractère


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut parse d'une chaine de caractère
    Salut!

    Je souhaite pouvoir entrer au clavier une chaine de caractere au format suivant:
    ch1 ch2:ch3
    ou
    ch1 ch2-ch3
    j'arrive a récupérer ch1, sauter l'espace, récupérer ch2, récupérer la ponctuation entre ch2 et ch1, mais je ne récuère que le premier caractère de ch3...

    Voici le 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
     
    int reco_com(char s[],char s2[],char temp[],char punct[], char fin[])
    {
      int i,k,j,l;
      char s1[256];
      for(i=0;i<32;i++)
        {
          if(isspace(s[i])!=8192)
    	s1[i]=s[i];
          else
    	{  for(k=i+1;k<32;k++)
    	    {
    	      if(ispunct(s[k])!=4)
    		temp[k-i-1]=s[k];
    	      else
    		{
    		  punct[0]=s[k];
    		  for(l=k+1;k<32;k++)
    		    fin[l-k-1]=s[l];
    		  goto suite;
    		}
    	    }
    	  goto suite;
    	}
        }
     suite:
      j=strcmp(s1,s2);
      return j;
     
    }
    ou s est la chaine entrée lu au clavier, s2 cette meme chaine a laquelle on a enlevé tt ce qui suit l'espace (juste ch1 dans l'exemple), temp <=> ch2, punct<=> : ou - et fin <=> ch3.

  2. #2
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    ton code donne pas trop envie de le lire, en plus y'a un goto...
    A ta place j'aurais utilisé pointeurs + sscanf.
    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
     
    int x;
     
    x = sscanf (ChaineLueAuClavier, "%s", ch1);
    if (x == 1){
      pointeur = ChaineLueAuClavier;
      pointeur = strchr (ChaineLueAuClavier, ' ');
      if (pointeur != NULL){
        pointeur++;
        x = sscanf (pointeur, "%[^:]s", ch2);
          if (x == 1){
             pointeur = strchr (pointeur, ':');
              if (pointeur != NULL){
                 pointeur++;
                 x = sscanf (pointeur, "%s", ch3);
                    if (x == 1)
                          printf ("parse réussis\n");
              }
          }
      }
    }
    Bon c'un peu relou mais ca devrait fonctionner ^^
    Compil your life guy!
    The Aures Project

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut
    que de fonctions inconnues...

    je vais devoir d'abord chercher comment marchent sscanf et strchr pour comprendre ton code, est-ce que c'est normal que quand je tape "man sscanf" dans mon terminal ca trouve rien ?

    merci en tout cas

  4. #4
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    t'as peut être pas les manpages ... fais un man scanf voir? (normalement elles sont groupées ensembles) sinon check tes depots.
    Au pire google > man <fonction>
    http://www.linux-kheops.com/doc/man/.../strchr.3.html
    http://www.linux-france.org/article/...3/scanf-3.html
    Compil your life guy!
    The Aures Project

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut
    pas de reponse pour scanf avec man dans mon terminal...

    merci pour les liens, je vais lire tout ca et je te dirai si ca marche ou pas!

  6. #6
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Oups je retire les & dans les sscanf ... erreur de ma part désolé
    Compil your life guy!
    The Aures Project

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    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
    char *p, *p0, chaine[1000] ;
    char sep[] = " -:\n\r\t" ;
     
     
    if ( fgets (chaine, 1000, stdin) != NULL)
      {
          p0 = chaine ;
          while ( (p = strtok(p0, sep)) != NULL )
             {
                  fprintf (stdout, "Element lu : [%s]\n", p);
                  if ( p0 != NULL )
                     p0 = NULL ; 
             }
      }

  8. #8
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    wow ôO
    Merci souviron j'ai jamais utilisé strtok auparavant disant que j'ai appris grand chose là
    Compil your life guy!
    The Aures Project

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut
    merci a vous deux pour vos reponses, mais j'ai peur de ne pas avoir le niveau pour les comprendre.

    Ne pourriez vous pas essayer de corriger mes erreurs pour que j'arrive a faire marcher mon code ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut
    merci a tous, j'ai finalement réussit a trouver mon erreur.

    vos réponses m'auront permises de rencontrer des nouvelles fonctions qui me serviront peut etre un jour...

    a+ !

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char *p, chaine[1000] ;
    char sep[] = " -:\n\r\t" ;
     
    if ( fgets (chaine, 1000, stdin) != NULL)
    {
       for (p = strtok (serveurMessage, sep); p != NULL; p = strtok (NULL, sep))
       {
          fprintf (stdout, "Element lu : [%s]\n", p);
       }
    }
    évite le double test et la variable p0.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 1
    Dernier message: 04/06/2012, 12h20
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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