FORUM Tom's Hardware » Programmation » C / C++ / Java » Comptez les occurences des lettres dans un fichier
 

Comptez les occurences des lettres dans un fichier

Il y a 473 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Comptez les occurences des lettres dans un fichier
 
Plus d'informations

Coucou c'est encore moi. J'ai encore un souci, plus leger que le precedent mais bon.
Alors voila je dois chercher le nombre de chaque lettre dans un fichier. Mon programme marche à moitié puisqu'il ne compte que les A et ne continu plus. Je comprend pas pourquoi.
Voici le programme en question:

Code :
  1. for(c='a';c<='z';c++)
  2.     {
  3.       cpt=0;
  4.         while (!fdf(flot))
  5.       {
  6.         p=strchr(consulter(flot),c); // retourne une adresse
  7.        
  8.         if (p!=(char*)NULL)
  9.           {
  10.         cpt++;
  11.         p++;
  12.         p=strchr(p,c);
  13.         prendre(flot);
  14.           }
  15.         else  prendre(flot); //passe à la lettre suivante
  16.       } 
  17.     if(cpt>0)
  18.       {
  19.         printf("Le nombre d'occurence de %c = %d\n",c,cpt);
  20.       }
  21.     }



Voila merci d'avance pour votre aide
@+
PS: je suis à disposition pour d'éventuelles questions


Message édité par stan876 le 20-03-2005 à 18:16:48

Profil : Pointeur
Plus d'informations

faudrait peut etre te remmettre au début du fichier pour chaque lettre non ?


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

c'est sur, et tu peux surement optimiser la chose :
tu crée un tableau de correspondance lettre<->nombre_trouve
tant que t'est pas à la fin de ton fichier, tu parcours tout ton fichier, lettre à lettre. si ton caractere est une lettre, tu incrémente le nombre pour celle ci(dans le tableau donc)
et enfin pour chaque element(donc lettre) de ton tableau tu connaitra le nombre


PS : pour ton 'algo' actuel : vire prendre(flot) dans ton if, et vire le mot ELSE :

if (p!=(char*)NULL){
cpt++;
p++;
p=strchr(p,c);
}
prendre(flot);

ca fait la meme chose avec une ligne de moins


Message édité par didiboy le 20-03-2005 à 19:39:10
Plus d'informations

Ben pour moi il se remet tout le temps au debut du fichier mais c'est vrai que l'erreur vient surement de là.
Erf le problème c'est que j'essai mais j'arrive pas.
J'ai essayé d'ouvrir le fichier à chaque for et de le fermer à la fin du for mais ca marche toujours pas.
Une idée de comment faire ?
Et merci déjà

Profil : Pointeur
Plus d'informations

ne fait pas un for allant de 'a' a 'z' mais plutot de ord('a') a ord('z')...


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

stan876 a écrit :

Ben pour moi il se remet tout le temps au debut du fichier mais c'est vrai que l'erreur vient surement de là.
Erf le problème c'est que j'essai mais j'arrive pas.
J'ai essayé d'ouvrir le fichier à chaque for et de le fermer à la fin du for mais ca marche toujours pas.
Une idée de comment faire ?
Et merci déjà


t'as essayé ma proposition? une seule ouverture necessaire, c'est suremenet bcp plus rapide

Plus d'informations

Jvais tester ton truc
Et sinon si je fais pas de for je fais quoi j'ai pas compri "de ord('a') a ord('z')..." :)

Profil : Pointeur
Plus d'informations

prendre directement les code ascii des caractères )


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Oui donc je sais que le a correspond à 97 et que le z correspond à 122. Mais comment le compilateur va comprendre que je parle du code du a,b,etc..
Je peux pas faire de for (c='97';c='122';c++) alors je fais comment ?

Profil : Pointeur
Plus d'informations

for(char c=97;c<123;c++)
{
// do
}


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Bon alors j'ai fait comme tu m'as dit KangOl mais ça marche toujours pas. Il me compte que les a. Le probleme vient donc qu'il ne reparcours pas le fichier plus d'une fois. Mais je sais pas comment faire. J'ai essayé d'ouvrir le fichier et de le fermer dans le for comme ça il est obligé de la parcourer mais ça veut pas marcher.
Sinon pour ta proposition didiboy ça marche niquel mais ça m'avance pas trop, c'est juste pour optimiser :) mais merci quand même.
Allez si vous pouvez me dire comment parcourir le fichier plus d'une fois ça serait cool. Merci les gens @+

Profil : Pointeur
Plus d'informations

donc faut

ouvrir le fichier
pour chaque lettre
se placer au debut du fichier
reinitialiser compteur a zero
pour chaque caractere du fichier
si caractere = lettre en cour
incrementer compteur
finpour
afficher compteur
finpour
fermer fichier


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Le probleme de ton truc c'est que quand tu dis "si caractere = lettre en cours" je sais pas le faire. Je m'explique dans mon cas ça donnerai if(c==consulter(flot))
Le probleme c'est que ma fonction consulter a le prototype suivant:
void *consulter(Flot flot)
Il y a donc un souci car je compare un void* avec un caractère et ça le compilateur il aime pas :(
Donc voila. Sinon moi je propose un truc du style, surement moins bien mais dis moi ce que tu en penses


pour chaque lettre
ouvrir le fichier
reinitialiser compteur a zero
si caractere = lettre en cour
incrementer compteur
finsi
afficher compteur
fermer fichier
finpour


Alors? :)


Message édité par stan876 le 21-03-2005 à 20:09:20
Profil : Pointeur
Plus d'informations

non !! faut pas faire comme ca !!!

le casting tu connais ?


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

casting connais pas non ? c'est quoi ?