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 :
for(c='a';c<='z';c++)
{
cpt=0;
while (!fdf(flot))
{
p=strchr(consulter(flot),c); // retourne une adresse
if (p!=(char*)NULL)
{
cpt++;
p++;
p=strchr(p,c);
prendre(flot);
}
else prendre(flot); //passe à la lettre suivante
}
if(cpt>0)
{
printf("Le nombre d'occurence de %c = %d\n",c,cpt);
}
}
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
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
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à
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
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 ?
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 @+
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
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