Comptez les occurences des lettres dans un fichier
Dernière réponse : dans Programmation
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:
Voila merci d'avance pour votre aide
@+
PS: je suis à disposition pour d'éventuelles questions
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:
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
Autres pages sur : comptez occurences lettres fichier
Lassé par la pub ? Créez un compte
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
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
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à
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à
stan876 a écritBen 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à
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
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 @+
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 @+
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?
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?
Ton algo est proche de celui d'un calcul d'histographe dans une image il ne faut biensur pas reparcourrir ton fichier pour chaque lettre. Il suffit de créer un tableau contenant des compteur que tu increment pour chaque lettre rencontré:
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.
unsigned int tab[255]; //declaration du tableau
init(tab); //initialise le tableau à zero
while( c = lireFichier() ) { //Parcour le fichier
tab[ c ]++; //Increment le tableau pour le caractere 'c'
}
//Le tableau contient le nmobre de chaque caractere trouvé
show( tab );
dark_ange a dit :
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.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumAgrndir les lettres
- ForumCombinaison de lettres
- ForumAggradir les lettres
- ForumNombre en toutes lettres
- articlesGrandeur lettres
- ForumAgrandir les lettres de l'ordinateur
- ForumExcel compter les occurences
- ForumCompter les fichier en bat
- ForumComment faire pour agrandir les lettres
- ForumInverser les lettres des partitions
- Voir plus