A voir également:
- Rechercher un mot dans une chaîne de caractère python
- Rechercher ou entrer l'adresse - Guide
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractères spéciaux : comment taper des |—[©\½→}… - Guide
- Voir mot de passe wifi android - Guide
9 réponses
je propose la solution suivante:
DEBUT
tu initialise ton compteur de mot à 0
tu mets ton mot dans un buffer buff
et tu parcours ton fichier grâce à getc
à chaque fois que tu tombes sur la premère lettre de
ton mot c'est à dire buff[0] tu compares caractère par caractère et tant que les caractères comparés son identique tu incrémentes i.
Tu incrémentes ton compteur seulement si une fois arrivé à la fin de buff tu as ! isalpha(getc).
Ensuite tu remets i=0 et tu recommences jusqu'à ce que tu tombe sur EOF.
FIN
DEBUT
tu initialise ton compteur de mot à 0
tu mets ton mot dans un buffer buff
et tu parcours ton fichier grâce à getc
à chaque fois que tu tombes sur la premère lettre de
ton mot c'est à dire buff[0] tu compares caractère par caractère et tant que les caractères comparés son identique tu incrémentes i.
Tu incrémentes ton compteur seulement si une fois arrivé à la fin de buff tu as ! isalpha(getc).
Ensuite tu remets i=0 et tu recommences jusqu'à ce que tu tombe sur EOF.
FIN
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
15 mai 2005 à 17:34
15 mai 2005 à 17:34
Je crois que le code donné par tafiscobar est parfais dans ton cas!
un exemple complet du programme que tu veux realiser pourrais etre:
un exemple complet du programme que tu veux realiser pourrais etre:
#include <stdio.h> #include <stdlib.h> // cs : texte complet // ct : mot recherché int nboccurences (char *cs, char *ct) { int nb = 0; // initialiser le nombre d'occurences int lengthct = strlen (ct); // longueyr du mot recherché while (1) // repeter toujours! la fin sera indiquée // par le "return nb" { if (strstr (cs, ct) == NULL) // ct ne se trouve pas ds cs return nb; // retourner le nombre nb++; // incrementer le nombre d'occurences if (lengthct < strlen(cs)) // reste encore du texte cs = cs + lengthct; // sauter le mot trouvé else // fin du texte return nb; // retourner le nombre } } void main() { char *mot[20]; char *texte[200]; printf("Donner le texte: "); gets(texte); printf("Donner le mot: "); gets(texte); printf("\n"); printf("Le nombre d'occurences est : %d\n",nboccurences(texte,mot); }
merci infiniment à vous deux,
un dernier petit soucis,ben j ai fait une petite recherche pour gets que je ne connaissais pas auparavant et si j'ai bien compris elle fournit l adresse du premier caractere de la chaine...
sinon,je ne comprends pas pourquoi on passe l adresse de mot et de texte ( char *texte;char *mot) puisque, d'apres mes petites connaissances les tableaux ce sont deja des adresses.
et enfin quand tu appelles ta fonction nboccurences, ne faut-il pas par hasard l appeler nboccurences(&texte,&mot)?
faut dire qu'avec toutes les documentations que j ai lu sur les pointeurs je suis toujours perdue...
un dernier petit soucis,ben j ai fait une petite recherche pour gets que je ne connaissais pas auparavant et si j'ai bien compris elle fournit l adresse du premier caractere de la chaine...
sinon,je ne comprends pas pourquoi on passe l adresse de mot et de texte ( char *texte;char *mot) puisque, d'apres mes petites connaissances les tableaux ce sont deja des adresses.
et enfin quand tu appelles ta fonction nboccurences, ne faut-il pas par hasard l appeler nboccurences(&texte,&mot)?
faut dire qu'avec toutes les documentations que j ai lu sur les pointeurs je suis toujours perdue...
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
15 mai 2005 à 13:03
15 mai 2005 à 13:03
salut, strstr (cs, ct) => retourne un pointeur sur la premiére occurence de la chaine ct ds la chaine cs. Donc tu fais une boucle et tu comptes le nombre de fois ou tu rencontres ta chaine ct. Voici un exemple de code:
int nboccurences (char *cs, char *ct) { int nb = 0; int lengthct = strlen (ct); while (1) { if (strstr (cs, ct) == NULL) // ct ne se trouve pas ds cs return nb; nb++; (lengthct < strlen(cs)) ? cs = cs + lengthct: return nb; } }
voilà ce que j'ai fait si tu as le temps de le regarder, j arrive pas à continuer, càd comment exploiter la fonction extrait
merci
int different (char A[], char B[])/*fonction qui compare deux mots*/
{int i=0;
int j=0;
while ((A[i]!='\0')&&(B[j]=!'\0'))
{
if (A[i]!=B[j])
i++;
if ((A[i]=='\0')&&(B[j]=='\0'))
return 0;
}
else
return 1;
}
int extrait(text[],mot[])
{char tab[N];
int i=0;
while ((text[i]>='a')&&(text[i]<='z'))
/*je n ai considéré que le cas ou le texte est écrit en miniscules
je traiterai les autres cas après */
{tab[i]=text[i];
i++;}
if (different(tab,mot)==1)
/*le mot extrait est != du mot recherché*/
return 1;
else
return 0;}
merci
int different (char A[], char B[])/*fonction qui compare deux mots*/
{int i=0;
int j=0;
while ((A[i]!='\0')&&(B[j]=!'\0'))
{
if (A[i]!=B[j])
i++;
if ((A[i]=='\0')&&(B[j]=='\0'))
return 0;
}
else
return 1;
}
int extrait(text[],mot[])
{char tab[N];
int i=0;
while ((text[i]>='a')&&(text[i]<='z'))
/*je n ai considéré que le cas ou le texte est écrit en miniscules
je traiterai les autres cas après */
{tab[i]=text[i];
i++;}
if (different(tab,mot)==1)
/*le mot extrait est != du mot recherché*/
return 1;
else
return 0;}
pour ce qui est de ta fonction int different(), tu peux utiliser à la place la fonction strcmp qui est une fonction du C qui fait déjà ce travail, elle retourne 0 si les deux mot sont égaux.
Par contre si tu insistes pour ta fonction int different()
Pour ce qui est de ta fonction extrait je na'ai pas bien saisie mais lorsque tu fais:
En fait la tu mets ton texte dans tab.
Enfin bref pour exploiter ta fonction extrait il ya deux cas:
1) soit tu as une liste de mot et tu veux chercher leur nombre d'occurence et j'ai compris que tu voulais faire ça
2)soit tu veux connaitre le nombre d'occurence de chaque mot du texte
Je te réponds pour le 1). la manière de procéder est la suivante:
Pour chaque mot de la liste faire
->extraire le mot dans le texte
- si le mot existe il faut que tu fasses une fonction qui compte son nombre d'occurence dans le texte, où alors tu modifie ta fonction extraire pour qu'elle compte le nombre d'occurence
Cordialement
Par contre si tu insistes pour ta fonction int different()
int different (char A[], char B[])/*fonction qui compare deux mots*/ { int i=0; int j=0; while ((A[i]!='\0')&&(B[j]=!'\0')) { if (A[i]!=B[j]) return 1; /*car si deux lettres ne sont pas identiques c'est que les mots sont differents*/ i++; } return 0; /*si les conditions de la boucle sont vérifiés c'est que les mots sont identiques*/ }
Pour ce qui est de ta fonction extrait je na'ai pas bien saisie mais lorsque tu fais:
while ((text[i]>='a')&&(text[i]<='z')) { tab[i]=text[i]; i++; }
En fait la tu mets ton texte dans tab.
Enfin bref pour exploiter ta fonction extrait il ya deux cas:
1) soit tu as une liste de mot et tu veux chercher leur nombre d'occurence et j'ai compris que tu voulais faire ça
2)soit tu veux connaitre le nombre d'occurence de chaque mot du texte
Je te réponds pour le 1). la manière de procéder est la suivante:
Pour chaque mot de la liste faire
->extraire le mot dans le texte
- si le mot existe il faut que tu fasses une fonction qui compte son nombre d'occurence dans le texte, où alors tu modifie ta fonction extraire pour qu'elle compte le nombre d'occurence
Cordialement
merci pour tes explications qui me sont tres utiles, sauf que là mon probleme c'est que ma fonction extraire ne me permet d'extraire que le premier mot et je n'arrive pas à trouver la boucle adéquate me permettant d'extraire les autres mot du texte et les comparer.
mon but à la fin est bien d'avoir le nombre d occurence d'un mot dans le texte ( ce mot est entré par l utilisateur, le texte est bien défini).
donc, j'ai pas mis le compteur car je n'arrive pas encore à comparer les mots du texte au mot recherché, j'essaie donc de faire étape par étape pour me simplifier la tache.
Bonne journée
et merci encore une fois
mon but à la fin est bien d'avoir le nombre d occurence d'un mot dans le texte ( ce mot est entré par l utilisateur, le texte est bien défini).
donc, j'ai pas mis le compteur car je n'arrive pas encore à comparer les mots du texte au mot recherché, j'essaie donc de faire étape par étape pour me simplifier la tache.
Bonne journée
et merci encore une fois
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup sauf que je suis débutante en programmation et donc je comprends pas votre programme.
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
15 mai 2005 à 15:06
15 mai 2005 à 15:06
Salut, je ne sais ce que tu ne comprends pas, dis =>
On considére que le texte est chargé ds le tableau. Donc je commence a faire une recherche avec la fct strstr qui me donne la premiére occurence ds le texte (le pointeur du premier caractére) s'il trouve quelque chose, NULL sinon. Donc je fais un test, s'il ne trouve pas quelque chose, je retourne le nb qui contient le nombre d'occurences calculé. S'il trouve quelque chose, j'incremente le compteur et j'incrémente également le pointeur du texte -en faisant un test au passage pour éviter de depasser la méoire du texte de départ et si jamais je depasse le comportement est indéterminé- , pour lui dire qu'il doit commencer a faire la recherche a partir de ce pointeur. Tout cela se fait dans la boucle while. Je ne sais pas si j'ai été clair.
On considére que le texte est chargé ds le tableau. Donc je commence a faire une recherche avec la fct strstr qui me donne la premiére occurence ds le texte (le pointeur du premier caractére) s'il trouve quelque chose, NULL sinon. Donc je fais un test, s'il ne trouve pas quelque chose, je retourne le nb qui contient le nombre d'occurences calculé. S'il trouve quelque chose, j'incremente le compteur et j'incrémente également le pointeur du texte -en faisant un test au passage pour éviter de depasser la méoire du texte de départ et si jamais je depasse le comportement est indéterminé- , pour lui dire qu'il doit commencer a faire la recherche a partir de ce pointeur. Tout cela se fait dans la boucle while. Je ne sais pas si j'ai été clair.
sam3000
Messages postés
1225
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
13 juin 2005
144
16 mai 2005 à 12:17
16 mai 2005 à 12:17
"gets" est "scanf" mais seulement pour les chaines de caracteres
la difference est que scanf n'accepte pas l'espace dans la chaine (c'est un separateur d'entrees) mais gets met tout ce qui est tapé dans la variable (pour saisir une phrase entiere)
la difference est que scanf n'accepte pas l'espace dans la chaine (c'est un separateur d'entrees) mais gets met tout ce qui est tapé dans la variable (pour saisir une phrase entiere)
15 mai 2005 à 00:21
je me demandais s il n y avait pas un moyen plus simple pour parcourir mon texte.
j ai pensé à une fonction qui extrait les mots du texte, et une autre(que j 'ai deja faite) qui compare le mot extrait au mot recherché et qui incremente le compteur si les deux mots sont identiques.
mais mon prbl consiste à faire la fonction extraireMot
si tu as une idée,merci de m'aider
Sophie
15 mai 2005 à 00:31
On suppose que ton texte est dans un tableau de caractère.
Cré un tableau de caractère tab , et parcours le tableau de ton texte et tant que tu ne tombes pas sur un caractère non alphabétique tu recopies le caractère dans tab. Ensuite une fois que tu as ton mot dans tab tu le compare avec la fonction de librairie strcmp. Et tu répètes l'opération jusqu'a ce que tu arrives sur le caractère fin de chaîne '\0'
Je ne parle donc pas du cas où ton texte est dans un fichier...
15 mai 2005 à 00:38
je vais essayer de faire le programme,esperant ne pas rencontrer d'autres soucis
merci encore une fois