Rechercher un mot dans une liste

akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005 - 8 juin 2005 à 19:01
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005 - 14 juin 2005 à 20:45
salut a tous,

j'ai creer un tableau contenant des mots ( 9 lettres maximum)

je voudrais que lorsque l'utilisateur rentre une sequence de 9 lettre aléatoire, le programme donne tous les mots de ma liste qui pouraient etre formés à partir de ces lettres.(le but etant qu'il affiche les plus longs)

ce programme me semble pas tres complexe, mais n'ayant que des notions de bases, je ne vois pas par ou commencer....

help me

merci akwell
A voir également:

17 réponses

cs_thedestiny Messages postés 56 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 juin 2008
8 juin 2005 à 19:12
Bonjour,

Alors ce n'est pas trop compliqué :)
Tu commences par compter le nombre de lettre saisie par l'utilisateur ( strlen(char*) par exemple )
Après, grace à une liste contenue dans un fichier texte ou autre tu vas faire une simple boucle exemple en vérifiant que les mots de la taille déterminée auparavant contiennent toutes les lettres demandées à l'aide de strstr().

Désolé j'ai pas le temps de te donner un exemple, j'espère que tu y arriveras, sinon dis le je te mettrai le bout de code :)

Amicalement,
The Destiny
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
8 juin 2005 à 19:42
l'utilisateur saisira tjs 9 lettres
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
8 juin 2005 à 23:19
le gros probléme c'est que je n'ai que des notions basiques en c++ (tres basiques)

j'ai eu 15 heures de cours et on aurait dit que le prof parlait a des ramolis du cerveau
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
8 juin 2005 à 23:27
j'avais penser faire tout les anagrammes possibles avec les 9 lettres (9^9 possibilités) et puis les comparer avec ma liste de mot mais c'est assez long d'execution et pas tres performant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 juin 2005 à 09:20
soit tab ton tableau de mots et size sa taille.

soit ch1 le mot saisi par l'utilisateur (toujours 9 lettres? pas plus, pas moins?).

Voici ce que tu peux faire:


for (int i=0; i<size; i++) // parcours du tableau de mots

{

for (int j=0; j<9; j++) // parcours des lettres du mot saisi

{

if (NULL==strchr(tab[i], ch1[j]) // si une lettre saisie n'appartient pas à un mot "connu"

return
FALSE;
// on quitte

}

}


Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
9 juin 2005 à 10:08
l'utilisateur rentre tjs 9 lettes

ex:
bnaeaopte ce qui correspond a bateau ( le mot le plus long dans la liste de mots, possible avec cette sequence de lettes)

voila ce que j'ai su faire pour l'instant...

#include
#include <fstream>
using namespace std ;
ifstream fichier("dico.txt") ;



int main (int argc, const char * argv[]){
const int K=200000 ;
string n;
char a,b,c,d,e,f,g,h,i;


string dico[K];


cin >>a>>b>>c>>d>>e>>f>>g>>h>>i;


if(! fichier.is_open()) // si je fichier de données ne se trouve pas dans le repertoire de l'executable
cout<<"Erreur lors de l'ouverture du fichier"<<endl;
int z=0;
while(!fichier.eof()){ //la lecture s'arrete quand toutes les données ont été lues

fichier >> n;
dico[z]=n;
z++;
}




for (int z=1;z<K;z++){
cout<<dico[z]<<endl;
}



fichier.close() ;
system("PAUSE") ;
return 0 ;
}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 juin 2005 à 10:36
OK,

ce que tu fais c'est:

- saisir le mot de l'utilisateur

- ouvrir ton fichier contenant la liste de mots prédéfinis (tu devrais peut-être inverser ces 2 étapes...)

- ranger chaque mot dans un tableau

- afficher chaque mot du tableau (attention: tu as oublié d'afficher le 1er élément: dico[0]...)


Reste plus qu'à comparer le mot utilisateur avec ton dico.


Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
9 juin 2005 à 11:34
mais le probleme c'est que je sais pas comment faire pour comparer la sequence de lettres et la liste de mots
car la sequence de lettre est aléatoire
et denerer tout les anagramme a 9lettre (ou moins) et les comparer avec la liste prendrait bcp tro de temps..

alors je bloque
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 juin 2005 à 13:33
Euh... t'as essayé le pseudo-code que je t'ai passé? T'as un soucis pour l'appliquer à ton cas?

En gros, tu as les lettres saisies par l'utilisateur, tu as un mot tiré
du dico, tu dois juste vérifier si toutes les lettres du mot courant
(tiré du dico) font partie de celles de l'utilisateur...

Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
9 juin 2005 à 14:38
ben j'ai quelques soucis pour comprendre et appliquer le code que tu m'as donner
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
9 juin 2005 à 14:43
le petit probléme que j'ai pour la comparaison est que mes mots sont sous la forme de string
et que mes lettres sous la forme de char....

le second probléme, c'est le cas ou une lettre est utilisée 2 fois
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
11 juin 2005 à 22:57
merde plus personne pour m'aider????
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
13 juin 2005 à 21:20
plus personne ne lit mon message??
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 juin 2005 à 09:22
Salut!

(Désolé, j'avais des problèmes pour me connecter sur le forum). Alors, où en es-tu? Problème de string et de char *?

Pour passer de string à char * : std::string::c_str()
Ensuite, les fonctions de base (strcmp, strchr...) te sont accessibles...



Dans le cas de lettres utilisées plusieurs fois: t'as pensé à faire un compteur?


Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
14 juin 2005 à 15:33
lol je connais rien de tout ca

je n'arrive a faire que ca

#include
#include <fstream>
using namespace std ;
ifstream fichier("dico.txt") ;

int main (int argc, const char * argv[]){
const int K=200000 ;
string n;
char a,b,c,d,e,f,g,h,i;


string dico[K];


cin >>a>>b>>c>>d>>e>>f>>g>>h>>i;


if(! fichier.is_open()) // si je fichier de données ne se trouve pas dans le repertoire de l'executable
cout<<"Erreur lors de l'ouverture du fichier"<<endl;
int z=0;
while(!fichier.eof()){ //la lecture s'arrete quand toutes les données ont été lues

fichier >> n;
dico[z]=n;
z++;
}




for (int z=1;z<K;z++){
cout<<dico[z]<<endl;
}



fichier.close() ;
system("PAUSE") ;
return 0 ;
}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
14 juin 2005 à 17:06
Voilà un code qui fonctionne. Remets le à ta sauce. Attention! le cas où plusieurs lettres sont répétées n'est pas géré ici.



#include

#include <fstream>

using namespace std ;





int main(void)

{

ifstream fichier("D:\\Bruno\\dico.txt");



const int K=10;

char UserString[10]; // chaine entrée par l'utilisateur



char* dico[K]; // dico extrait du fichier

char* Possibilite[K]; // mots trouvés

int index=0, nbFind, i, j, DicoSize=0;



printf("Entrer 9 lettres, sans espaces\n");

gets(UserString); // lecture du mot

if (9!=strlen(UserString)) // vérification du nombre de lettres saisies

{

printf("erreur lors de la saisie\n");

system("pause");

return 0;

}



for (i=0; i<K; i++) // allocation des tableaux

{

dico[i]=(char*)malloc(10*sizeof(char));

Possibilite[i]=(char*)malloc(10*sizeof(char));

}



if(!fichier.is_open()) // ouverture du fichier

cout<<"Erreur lors de l'ouverture du fichier"<<endl;



while(!fichier.eof()) //la lecture s'arrete quand toutes les données ont été lues

{

fichier.getline(dico[DicoSize], 10, '\n'); // extraction des chaines du fichier

DicoSize++; // comme ça, tu as la taille du dico (en espérant que DicoSize < K....)

}

fichier.close();



for (i=0; i<DicoSize; i++) // pour chaque mot du dico

{

nbFind=0; // nombre de caractères trouvés

for (j=0; j<9; j++) // pour chaque caractères de la chaine extraite du dico

{

if (strchr(UserString, dico[i][j])) // on le cherche dans la chaine UserString

nbFind++; // si trouvé, on incrémente le compteur

}

if (nbFind==9) // on a trouvé un mot possible, on le garde

strcpy(Possibilite[index++], dico[i]);

}



for (i=0; i----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
0
akwell1 Messages postés 47 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 19 juin 2005
14 juin 2005 à 20:45
ca plante .....

j'ai exam apres demain donc je dois bosser

je te tiens au courant
0
Rejoignez-nous