Programme en c qui compte le nombre d'occurence d'un mot

Fermé
akademia Messages postés 34 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 30 mars 2015 - Modifié par jipicy le 30/03/2015 à 20:11
[Dal] Messages postés 6044 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 23 janvier 2023 - 1 avril 2015 à 11:05
bonjour alor voila mon problemme j'ai envie faire un programme qui verifie le nombre d'apartion d'un mot dans un fichie texte ligne par ligne j'ai donc utiliser la fonction fgets et strtok et strcmp voila mon code
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
 int taille;
 int numligne;
 int nbrocc; 
 int nbroccp;
} mot;

 
main()
{
int n;
int d;
int k;
int s;
int p;
mot A;
int i;
i=0;
j=0;
s=0;
k=0;
char ch[100];
char sh[100];
printf("taper le nombre de ligne par page\n");
scanf("%d",&n);
printf("taper le  le mot que vous recherchez dans le fichie texte\n");
scanf("%s",&sh);
FILE *f;
A.nbrocc=0;
A.nbroccp=0;
f=fopen("testetp.txt","a+"); 
while (fgets(ch, 100, f) != NULL)
{
char *word=strtok(ch," ?!:.,\0 ");
while(word!=NULL){
    if(strcmp(sh,word)==0)
    {A.nbrocc++;
    }
 word=strtok(NULL," ?!:.,\0 ");
}i++;
k=A.nbrocc;
k=k-s;
s=A.nbrocc;
printf("le mot %s apparait %d fois dans la ligne %d\n",sh,k,i);
}
A.taille=strlen(sh);
printf("\nle nombre de ligne est = %d\n",i);
printf("le nombre d'occurence du mot  est = %d\n",A.nbrocc);
printf("la taille du mot est = %d\n",A.taille);
d=ceil((float )i/n);
printf("le nombre de page est = %d\n",d);
fclose(f);
return 0;
}

desole c mal ordone et y'a des declaration inutile
mon problemme est que le derinier mot de chaque ligne lorsqu'il n'est pas suivi par un blanc un point ou virgule..
n'est pas comptabilise dans le nombre d'occurence et pourtant j'ai mis \0(caractere saut de ligne) dans le strtok merci de votre aide
je precise aussi que le dernie mot du fichie texte lui est comptabilise

2 réponses

[Dal] Messages postés 6044 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 23 janvier 2023 1 040
Modifié par [Dal] le 30/03/2015 à 19:03
Salut akademia,

Ton code de compile pas.

Quand bien même il compilerait, on n'a pas de jeu de données pour le tester et observer le comportement que tu indiques.

Il ne peut pas fonctionner avec n'importe quel texte, car les lignes n'ont pas nécessairement une taille inférieure à 99 (il se peut donc que tu lises un mot à moitié), et tes caractères séparateurs ne sont pas exhaustifs par rapport à ceux pouvant être utilisés dans la langue française.

Mettre '\0' n'a pas de sens dans strtok, car c'est le caractère qui termine une chaîne.

Le caractère qui permet d'aller à la ligne est '\n'.

Dal

N.B. : ton code est également illisible car tu n'utilises pas les balises de <code c> permettant de préserver l'indentation de ton code, de colorer la syntaxe et numéroter tes lignes.

si tu n'as pas vu le bouton de l'éditeur te permettant de le faire, vois ce lien pour être guidé sur cette question, et à l'avenir poste ton code correctement stp
0