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 :

analyse syntaxique chaine de caractères


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut analyse syntaxique chaine de caractères
    Bonjour a tous

    Je dois verifier une chaine de caractère. Elle n'accepte que les "chiffres" entre 0 et 9 et les "," "-" " " " ." et "+".Le but est d'entrer des numéros de télphones. La chaine est limitée à 255 caractères.

    Lorsque l'on entre une suite de cacactères, sans espaces, (ce ne soit etre que des cacactères entre 0 et 9), ils sont automatiquement regroupés par défault par paire. ex : 2938362939 : 29 38 36 29 39

    De plus, il ya des groupes de caractères "chiffres" séparés par des espaces.
    Il ne doivent pas exeder 4 caractères. lorsqu'ils y a plus de 4 caractères à la suite sans espaces, ils doivent être réorganisés.Si c'est un nombre paire, on les regroupes pas paire, si impaire, on les regroupe comme suit
    ex : 11111 : 1 11 11 (pas 11 11 1).

    Avez vous des suggestions de la manière de s'y prendre?

    dernieère question : la touche entrée(return je ne sais pas comment on l'appelle) est-elle lue par la fonction strlen?

    merci beaucoup pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Il faut utiliser une expression régulière pour cela : http://nicolasj.developpez.com/articles/regex/

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Il faut utiliser une expression régulière pour cela : http://nicolasj.developpez.com/articles/regex/
    oui merci. ca m'a l'air tout de même bien compliqué alors que je pense que l'on peut passer par des moyens biens plus simples.

    if ( (ligne[i] >= '0' && ligne[i] <= '9') || (ligne[i]>=',' && ligne[i]<='.') || (ligne[i]==' ')){
    ...
    }

    Voici ce que j'ai commencé à faire. Pour reconnaitre certains caractères, je me suis basé sur le code ASCII. Est-ce une bonne idée? Sinon par rapport à la séparation des nombres décrite dans le sujet, y'a t-il des idées?
    rappel : une chaine en entré : 0101010101 ->chaine retournée 01 01 01 01 01
    ou : chaine en entrée 1111111 : chaine retournée 1 11 11 11

    merci pour vos réponse

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Je persiste à dire qu'un expression régulière est le plus simple.

    Pour ce qui est du "regroupement", tu dois parcourir ta chaine de droite à gauche, et insérer un espace toutes les 2 positions.

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Voyons comment va se construire la suite désirée en la lisant caractère par caractère dans l'ordre naturel gauche ->droite.
    - Si la suite comporte des blancs, il suffira de les ignorer.
    - La lecture se terminera si on obtient un caractère différent d'un chiffre (fonction isdigit()) ou d'un blanc.

    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
    * On note :
    - un blanc par - dans le tableau final (pour la lisibilité)
    - n le n° du caractère numérique écrit (n=0..N)
    - E la position où on doit écrire le nouveau caractère dans le tableau 
    - P les permutations à faire dans le tableau pour le modifier et obtenir la bonne configuration.
    
    * On écrira systématiquement le nouveau caractère numérique en E en le faisant suivre d'un blanc en E+1.
    
    - Tableau de départ "012345678" 
    
          Tableau obtenu                              Après permutations
    n | p 012345678901234 |  E |  Permutations P    |  012345678901234
    ----------------------|----|--------------------|---------------------
    0 |   0-              |  0 |                    |
    1 |   01-             |  1 |                    |
    2 |   01-2-           |  3 |  1/2               |  0-12-   
    3 |   01-23-          |  4 |                    |
    4 |   01-23-4-        |  6 |  1/2 4/5           |  0-12-34-
    5 |   01-23-45-       |  7 |                    |
    6 |   01-23-45-6-     |  9 |  1/2 4/5 7/8       |  0-12-34-56- 
    7 |   01-23-45-67-    | 10 |                    |
    8 |   01-23-45-67-8-  | 12 |  1/2 4/5 7/8 10/11 |  0-12-34-56-78-
    On obtient l'algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    - Ecrire le nombre numéro n (= 0..N) suivi d'un blanc à la position E(n) = n/2*3+n%2
    - Lorsque le tableau est rempli, 
       - si N est pair, permuter les éléments 3*k+1 et 3*k+2 pour k =0,1,...N/2-1
       - mettre '\0' en E(N)+1

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci. je vais voir ça.

Discussions similaires

  1. Analyser une chaine de caractère
    Par dvp_zero dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/04/2010, 19h22
  2. [RegEx] Analyser une chaine de caractères
    Par moukit233 dans le forum Langage
    Réponses: 6
    Dernier message: 31/10/2009, 12h59
  3. Analyser une chaine de caractère et la formater
    Par saad.hessane dans le forum C
    Réponses: 10
    Dernier message: 19/07/2008, 17h07
  4. Analyser une chaine de caractère
    Par dahu17 dans le forum C#
    Réponses: 6
    Dernier message: 23/04/2007, 14h39
  5. [Système] analyse de chaine de caractére
    Par bdptaki dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2006, 18h18

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