Langage c : Analyse de texte

raulily7 Messages postés 28 Statut Membre -  
 amigo -
Bonjour,
il s'agit d un programme qui permet de de connaitre la taille des mots d un texte et la fréquence de ces mots c a d par exemple pour le texte :" raul est le meilleur joueur du monde "
il dot m'afficher
on a 2 mots qui sont composés de 2 caractéres qui sont : le ,du
on a 1 mot qui est composé de 4 caractéres qui est : raul
ainsi de suite
mon probléme est que j'arrive pas a tirer les mots du texte
svp svp j ai besoin de votre aide
Configuration: Windows XP
Firefox 2.0.0.12

4 réponses

  1. hworang Messages postés 1375 Statut Membre 115
     
    Merci de ne pas tricher lors des devoirs ou autres exercices en dehors du loisir de programmer.

    Moi je ne dirait que https://openclassrooms.com/fr/
    Bonne année à tous sauf : aux flooders,pirateurs,spammeurs,
    boulet et à tous ceux que j'aime pas !!!
    1
  2. amigo
     
    Bonjour,

    Voila comment je ferai à ta place.
    Je déclare un tableau d'entier [100][2], pour un max de 100 mots ou plus à toi de voir, et chaque mot est defini par sa position dans le texte (index) et sa longueur, par exemple " raul est le meilleur joueur du monde "
    raul -> T[0][0]=1; T[0][1]=4 ; pos 1 , 4 car.
    est -> T[1][0]=2; T[1][1]=3 ; pos 2 , 3 car
    le -> T[2][0]=3; T[2][1]=2 ; pos 3 , 2 car
    ect...

    Ensuite on trie le tableau par longueur de mots croissant
    le -> T[0][0]=3; T[0][1]=2 ; pos 3 , 2 car
    du -> T[1][0]=6; T[1][1]=2 ; pos 6 , 2 car
    est -> T[2][0]=2; T[2][1]=3 ; pos 2 , 3 car
    raul -> T[2][0]=1; T[3][1]=4 ; posi 1 , 4 car
    etc...

    Apres c'est facile. Le plus dur c'est de faire une fonction qui décompose la phrase en mots, t'as une idée?

    A+.
    1
    1. raulily7 Messages postés 28 Statut Membre
       
      c'est la fonction qui décompose le texte en mots qui me pose probléme :s:s:s car si j 'arrive a faire cette fonction je n'aurai qu utiliser les fonctions strlen pr définir la longueur et strstr pour calculer la fréquence des mots

      merci amigo
      0
  3. amigo
     
    Bonjour,

    Je te fais cadeau de la fonction lire_mot() avec un exemple d'utilisation, tu pourras finir ton exo.
    tu lui passe en argument la phrase et la position du mot et elle retourne le mot si le mot est trouvé
    sinon elle retourne une chaine vide.

    lire_mot(" raul est le meilleur joueur du monde ",5); retourne "joueur"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char *lire_mot ();
    
    main()
    {
    
       char texte [500];
       char mot [256],c;
       int n,i,l;
       printf("Entrez une phrase:\n");
       gets(texte);
       n=1; strcpy (mot,lire_mot(texte,n));
         while  (strcmp(mot,"") != 0)  {
         printf("%s\t%d caracteres\n", mot, strlen(mot));
         n+=1; strcpy (mot,lire_mot(texte,n));}
    getch();
    return 0;
    }
    
    
    char *lire_mot (chaine , pos)
    char *chaine;
    int pos;
    {
       char car;
       static char mot [256];
       int c, i, n, k;
       c = 0;  i = 0; strcpy (mot, "");  n = strlen (chaine);  k = 0;
       car = ' ';
       while (c < pos  &&  i < n)       
       {
          while (car <= 32 && car > 0 &&  i < n)   car = chaine [i++] ;        
          if (i <= n)      c++;
          if (c == pos)     break;
          while ((car > 32 || car<0)  &&  i < n)      car =chaine [i++]; 
       }
       while ((car > 32  || car < 0) &&  i < n)
       {
           mot [k++] = car;     car = chaine [i++]; 
       }
       if (c == pos  &&  i >= n)        mot [k++] = car;
       mot [k] = '\0';
       return (mot);
    }
    
    1
    1. raulily7 Messages postés 28 Statut Membre
       
      je vs remercie infinimentn mais il y a un petit probléme
      par exemple si on écrit

      entrer votre texte :

      merci,amigo
      il affichera
      merci,amigo 11caractéres
      0
  4. amigo
     
    Bonjour,

    C'est normal parce que le séparateur entre chaque mot doit etre un espace. Or ce que tu as écrit est attaché, si tu veux que les signes de pontuation soit aussi consudérés comme séparateurs, il faut modifier la fonction en conséquence.

    Il faut non seulement repérer les espaces mais ausi les "," "." ";" ":" "!" "?" et éventuellement les caractères autres que a..z , A..Z, 0..9.

    Tout dépent de l'usage qu'on souhaite en faire. Ce que je t'ai donné c'est une fonction basique. Pour une analyse syntaxique complète, il faudra que tu écrives d'autres fonctions complémentaires.

    Salut
    0