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
amigo - 25 mars 2008 à 08:48
A voir également:
- Langage c : Analyse de texte
- Langage ascii - Guide
- Débuter langage batch windows - Guide
- Symboles langage sms - Forum Samsung
- Langage binaire - Guide
- Quotient rationnel langage c ✓ - Forum C
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
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/
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 !!!
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+.
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+.
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
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
merci 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"
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); }
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
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
par exemple si on écrit
entrer votre texte :
merci,amigo
il affichera
merci,amigo 11caractéres
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
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