Programma C urgent SVP

cyrine84 -  
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
programmation C
J'ai un ficher texte qui contient des lignes separés par un retour chariot;
chaque ligne contient des mots
le but c'est d'extraire les different mots du texte sans citer les occurence, mais il faut afficher pour chaque mot le num de la ligne ou il se trouve et le num de la position.
Exemple : Boris est un champion .
Je suis un champion
Normallement ca sera un tableau qui afficher les reusltat svts:
Boris(1,0)
est(1,1)
un (1,2),(2,2)
champion(1,3)(2,3)
je(2,0)
suis (2,1)

MErci d'avance

1 réponse

mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
Ca se fait facilement avec strtok (pour extraire les mots de chaque ligne + leur position), d'autant qu'un exemple assez bien fait est donné dans le man, qu'il te suffira d'adapter :
EXEMPLE
       Le  programme suivant utilise des boucles imbriquées qui utilisent str‐
       tok_r() pour scinder une chaîne en une  hiérarchie  d’éléments  à  deux
       niveaux. Le premier argument de la ligne de commande spécifie la chaîne
       à analyser. Le second argument spécifie le(s) séparateur(s)  utilisé(s)
       pour  séparer  la chaîne en éléments « majeurs ». Le troisième argument
       spécifie le(s)  séparateur(s)  utilisé(s)  pour  séparer  les  éléments
       « majeurs » en sous-éléments.

       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int
       main(int argc, char *argv[])
       {
           char *str1, *str2, *token, *subtoken;
           char *saveptr1, *saveptr2;
           int j;

           if (argc != 4) {
               fprintf(stderr, "Usage: %s string delim subdelim\n",
                       argv[0]);
               exit(EXIT_FAILURE);
           }

           for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
               token = strtok_r(str1, argv[2], &saveptr1);
               if (token == NULL)
                   break;
               printf("%d: %s\n", j, token);

               for (str2 = token; ; str2 = NULL) {
                   subtoken = strtok_r(str2, argv[3], &saveptr2);
                   if (subtoken == NULL)
                       break;
                   printf(" --> %s\n", subtoken);
               }
           }

           exit(EXIT_SUCCESS);
       } /* main */

       Voici un exemple de la sortie produite par ce programme :

       $ ./a.out ’a/bbb///cc;xxx:yyy:’ ’:;’ ’/’
       1: a/bbb///cc
                --> a
                --> bbb
                --> cc
       2: xxx
                --> xxx
       3: yyy
                --> yyy

Bonne chance
0