Trouver tous les mots d'un fichier qui peuvent etre formé par ch

firas scofield Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour
a partir d'une chaine de caracteres , je veux parcourir un dictionnaire (fichier texte) et trouver tous les mots qui peuvent etre former & partir de cette chaine , puis les transferer dasn une matrice , le code que j'ai ecrit , fonctionne seulement lorsque à la place du dictionnaire , je lui donne un mot (c'est à dire comparer la chaine donner avec un autre mot donner ) mais quand je travail avec le dictionnaire est tester chaque mot et apres j'affiche la matrice , il n'affche rien c'est à dire il n'a trouver aucun mot du dictionnaire qui peut etre former par la chaine donner , malgré qu'il existe plusieur..
voila le code :
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
int main()
{
char ch[27],mot[27];
char m[5000][27];//matrice dont je stock les mots du dictioonnaire qui peuvent etre former par ch
int i=0;
printf("donner une chaine \n");
gets(ch);
FILE* f=NULL;
f=fopen("dictionnaire.txt","r");

while(fgets(mot,27,f)!=NULL)
{
int j=0,erreur=0;//erreur variable bool intitialisé à 0 si une lettre du mot n'exite pas dans ch elle prend 1
while(j<strlen(mot)&& erreur==0)
{
if(strchr(ch,mot[j])!=NULL)

j++;

else
erreur=1;


}
if(!(erreur)) //tous les lettres du mots existent dans ch
{
strcpy(m[i],mot);
i++;
}
}
fclose(f);
int n=i;
for(i=0;i<n;i++)
printf("%s\n",m[i]);

return 0;
system("pause");
}
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Clairement, je n'ai pas tout lu.
Mais déjà, il y a quelques points à voir :
gets(ch); -> fonction à bannir. Utilise plutôt fgets(...);
Ensuite, attention à ces fonctions qui (sauf s'il n'y a plus de places) stockent le caractère '\n'... De fait, si tu fais des comparaisons, ça ne marchera pas. Je te conseille de remplacer '\n' par '\0'.
char *p=strchr(ch, '\n');
if(p!=NULL) {
     *p='\0';
}

Et le system("pause") est à mettre avant le return 0; sinon il sert à rien.

Cdlt,
0