Langage c : Analyse de texte

Fermé
raulily7 Messages postés 28 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 4 juin 2008 - 13 mars 2008 à 21:50
 amigo - 25 mars 2008 à 08:48
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
A voir également:

4 réponses

hworang Messages postés 1360 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 30 juin 2008 115
13 mars 2008 à 21:53
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
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
raulily7 Messages postés 28 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 4 juin 2008
13 mars 2008 à 22:41
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
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
raulily7 Messages postés 28 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 4 juin 2008
25 mars 2008 à 04:40
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
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