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 :

Analyser une chaine de caractère et la formater


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut Analyser une chaine de caractère et la formater
    Bonjour tout le monde.
    Je me suis inventé un petit exercice aujourd'hui, mais dont je ne trouve pas la solution.
    Le problème générale consiste à prendre une chaine en entré et de me fournir une sortie formaté.
    L'entrée est en faite une ligne écrit par l'utilisateur, avec ce format :
    [NUM_ELEVE] [NOM__ELEVE] [PRENOM_ELEVE] [NOTE_ELEVE]
    Le problème c'est que il se peut qu'on trouve des élèves ayant des nom et des prénoms composées.
    Exemple :
    1 nom1 prenom1 17.5
    2 nom2 prenom2_1 prenom2_2 15
    3 nom3_1 nom3_2 prenom3 16
    Je veux que en sortie il y est ce schéma : "%d\t%s\t%f".
    Exemple
    1 [TAB] nom1 prenom1 [TAB] 17.5
    2 [TAB] nom2 prenom2_1 prenom2_2 [TAB] 15
    3 [TAB] nom3_1 nom3_2 prenom3 [TAB] 16
    Le programme doit donc lire le premier nombre et l'afficher, ajouter une tabulation, puis lire le nom et le prénom, les écrire séparés par espace, ajouté une tabulation, et enfin écrire la note.
    J'espère que vous avez compris un peu le but.
    Je bloque en faite dans l'analyse de la chaine.
    Supposons que la chaine entré soit : "12 William Henry Gates 3"
    Je commence par faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sscanf(in,"%d ", &num_eleve);
    printf("%d\t",convoc);
    Puis, ben je sais pas comment faire.
    Merci de m'aider.

  2. #2
    Membre éclairé Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Par défaut
    Je crois bien que tu ne puisse pas, tu dois ajouter des élément à ta syntaxe. Par exemple mettre entre des guillemets nom et prénom, ou bien que le premier mot de nom et prénom commence par une majuscule, le reste en minuscule.

  3. #3
    Expert confirmé
    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 : 39
    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
    Par défaut
    Les nom et prénoms peuvent comporter des espaces donc tu ne peux pas utiliser espace comme délimiteur. Tu dois utiliser un caractère inutilisé, par exemple "12+William+Henry Gates+3". Ensuite tu peux utiliser strtok pour découper la chaîne selon le caractère '+' (pour avoir "12", "William", "Henry Gates", "3"). Utilise ensuite atoi pour convertir "12" et "3" en 12 et 3.

  4. #4
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Ben moi qui me disais que c'était facile.
    J'avais pensée à une trace de programme comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    La chaine est "12 William Henry Gates 3";
    Je prend le 12, je l'affiche et je l'efface de la chaine.
    La chaine est donc "   William Henry Gates 3".
    Je fais un strrev.
    La chaine est "3 setaG yrneH mailliW   ".
    Je prend le premier nombre, je lui fait un strrev et je le met en mémoire. Je l'efface ensuite de la chaine. cela donnerai :"  setaG yrneH mailliW   ".
    Un dernier strrev donnerai : "   William Henry Gates  ".
    Reste plus qu'à enlever les espaces qui débordent et afficher le tout.
    Vous en dites quoi?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    C'est un peu tordu et çà ne répond pas à la question du comment distinguer les champs nom, prenom lorsqu'ils sont "composés".
    Si tu te décides à mettre un séparateur entre les différents champs, l'analyse (ou ca commence et ou çà se termine) devient simple et pourra être réalisée avec strtok (par exemple).
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Mais justement, l'entrée que je vais fournir n'est pas une saisie texte, mais un fichier in.txt.
    L'application devra fournir un fichier out.txt contenant les chaines formatées.
    Le fichier in.txt est déjà écris, donc si je m'amuse à ajouter des '+' pour séparateur, c'est pas gagné. Justement je veux que ce soit l'application qui me mettent des +, ou des tabulations.
    Vous vous voulez avoir un fichier in avec des + et transformer les + en TAB. C'est bête comme application .
    Eh bien non, le fichier a un format brûte avec des espaces comme séparateur entre tous les mots, et il faut se démerder.
    Se qu'on sais par contre c'est que la première colonne contient un identifiant, et que la dernière colonne est la note de l'étudiant. La colonne du milieu contient le nom suivi du prénom, ou le prénom suivi du nom, on s'en fou un peu.

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

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. Formater une chaine de caractère
    Par jean-pierreL dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2007, 14h59
  4. Analyser une chaine de caractère
    Par dahu17 dans le forum C#
    Réponses: 6
    Dernier message: 23/04/2007, 14h39
  5. Réponses: 3
    Dernier message: 01/02/2006, 18h26

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