Probleme urgent en C
Résolu
Bonjour,
jai un probleme , c'est que j'ai des mots stockésdans une table de hacahge, et des séquences stockés dans une liste chainées.
Le probleme c'est que trouve pas une idée pour faire la comparaioson de cahque mot et chaque séquence : c'est à dire un mots est inclus dans une séquence de mots : le dernier mot de la sequence egale au mot en question).
merci d'avance
je compte sur vous
jai un probleme , c'est que j'ai des mots stockésdans une table de hacahge, et des séquences stockés dans une liste chainées.
Le probleme c'est que trouve pas une idée pour faire la comparaioson de cahque mot et chaque séquence : c'est à dire un mots est inclus dans une séquence de mots : le dernier mot de la sequence egale au mot en question).
merci d'avance
je compte sur vous
8 réponses
Ce n'est pas très dur en utilisant conjointement strstr et strlen, ou strtok et strcmp. Une façon de faire :
Bonne chance
#include <string.h> #include <stdio.h> #include <ctype.h> int chercher_mot(const char *phrase,const char *mot){ int last; const size_t size = strlen(mot); char *find = strstr(phrase,mot); char *p; while(find){ // le mot a été trouvé, mais est ce le dernier mot ? if(strlen(find) == size) return 1; else{ // le mot est peut être en dernière position mais suivi de caractères autre que des mots (ponctuation...) last = 1; // 1 si mot est bien le dernier dans la séquence, 0 sinon for(p = &(find[size]);*p != '\0';++p){ if (isalpha(*p)){ // on a trouvé un caractère alphanumérique derrière donc ça ne va pas last = 0; break; } } // le mot n'est pas suivi de caractère alphanumérique donc c'est bon if (last) return 1; } find = strstr(&(find[1]),mot); } return 0; } int main(){ const char *phrase = "bonjour les amis"; const char *mot = "amis"; if (chercher_mot(phrase,mot)){ printf("le mot [%s] a été trouvé en dernière position de la phrase [%s]\n",mot,phrase); }else{ printf("le mot [%s] n'a pas été trouvé en dernière position de [%s]\n",mot,phrase); } return 0; }
Bonne chance
Si c'est en C++
Si tes mots sont stockés dans des std::string ce n'est pas très compliqué, il suffit de faire un find du mot à l'intérieur de la séquence de mot. Pour stocker tes mots tu as intérêt à utiliser des std::set, et pour ta liste de séquence une std::list. Toutes ces classes font parties de la STL et permettent de résoudre facilement ton problème.
Pour plus de détails, un peu de lecture :
http://www.commentcamarche.net/faq/sujet 11255 introduction a la stl en c standard template library
Si c'est en C
C'est plus compliqué mais tu peux utiliser des fonctions comme strstr.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strstr.3.html
Sans le code difficile d'en dire plus
Bonne chance
Si tes mots sont stockés dans des std::string ce n'est pas très compliqué, il suffit de faire un find du mot à l'intérieur de la séquence de mot. Pour stocker tes mots tu as intérêt à utiliser des std::set, et pour ta liste de séquence une std::list. Toutes ces classes font parties de la STL et permettent de résoudre facilement ton problème.
Pour plus de détails, un peu de lecture :
http://www.commentcamarche.net/faq/sujet 11255 introduction a la stl en c standard template library
Si c'est en C
C'est plus compliqué mais tu peux utiliser des fonctions comme strstr.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strstr.3.html
Sans le code difficile d'en dire plus
Bonne chance
Désolé mais là avec juste un code partiel c'est pas facile de rentrer dedans. La solution que je t'ai donné marche donc bon...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ben pas chez moi regarde...
Je corrige l'initialisation de phrase :
Je recompile, et j'obtiens :
amis, qui est inclu dans la phrase n'est pas en dernière position, ce qui correspond bien à ce qu'on attendait (ou à ce que j'ai compris du sujet).
Bonne chance
Je corrige l'initialisation de phrase :
const char *phrase = "bonjour les amis ca va ?";
Je recompile, et j'obtiens :
le mot [amis] n'a pas été trouvé en dernière position de [bonjour les amis ca va ?]
amis, qui est inclu dans la phrase n'est pas en dernière position, ce qui correspond bien à ce qu'on attendait (ou à ce que j'ai compris du sujet).
Bonne chance
Nickel, bonne continuation :-)
Bonjour,
jai developpé une fonction en C et qui bug: ua pas mal d'erreurs!!! 4 erreurs.
cettefonction prend en entree un mot et une liste chainée et doit verifier que le mot en entréé verifie la condition d'inclusion pour tous les sequence des mots qui sont dans une liste chainée.
la fonction de verification marche nikel pour 1 mot et 1 seq
mais quand je la fait tourner pour tte une liste cacause un pb.
merci
je compte sur vous.
jai developpé une fonction en C et qui bug: ua pas mal d'erreurs!!! 4 erreurs.
cettefonction prend en entree un mot et une liste chainée et doit verifier que le mot en entréé verifie la condition d'inclusion pour tous les sequence des mots qui sont dans une liste chainée.
la fonction de verification marche nikel pour 1 mot et 1 seq
mais quand je la fait tourner pour tte une liste cacause un pb.
merci
je compte sur vous.
int chercher_mot(const char *phrase,const char *mot){ int last; const size_t size = strlen(mot); char *find = strstr(phrase,mot); char *p; while(find){ // le mot a été trouvé, mais est ce le dernier mot ? if(strlen(find) == size) return 1; else{ // le mot est peut être en dernière position mais suivi de caractères autre que des mots (ponctuation...) last = 1; // 1 si mot est bien le dernier dans la séquence, 0 sinon for(p = &(find[size]);*p != '\0';++p){ if (isalpha(*p)){ // on a trouvé un caractère alphanumérique derrière donc ça ne va pas last = 0; break; } } // le mot n'est pas suivi de caractère alphanumérique donc c'est bon if (last) return 1; } find = strstr(&(find[1]),mot); } return 0; } int verifCondition2seq(char *mot, Liste *seq) { if(seq==NULL) return 0; Liste tmp = *seq; while(tmp != NULL) { if(chercher_mot(tmp->mot, mot) return 1; printf ("ok"); tmp=tmp->suivant; } return 0; }
c tres gentil de ta part :)
je vais essayé ta version et vais t'informaer le resultat.
a+
vus avez une idéée:
ya un warning
juste le teste sile moty est le dernier des mots constituant les séquences des mots.
merci