Probleme urgent en C
Résolu/Fermé
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
4 juil. 2008 à 19:46
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 - 9 juil. 2008 à 00:41
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 - 9 juil. 2008 à 00:41
8 réponses
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
4 juil. 2008 à 20:50
4 juil. 2008 à 20:50
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
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
4 juil. 2008 à 20:22
4 juil. 2008 à 20:22
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
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
4 juil. 2008 à 20:26
4 juil. 2008 à 20:26
merci mamiemando d'avoir regardé mon post :
je code en C
mais faut s'aasurer que le dernier mot de la sequenec est le meme que le mot en questio
exple :
mot : amis
sequence : bonjour les amis.
tu vois?
merci
je code en C
mais faut s'aasurer que le dernier mot de la sequenec est le meme que le mot en questio
exple :
mot : amis
sequence : bonjour les amis.
tu vois?
merci
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
6 juil. 2008 à 01:58
6 juil. 2008 à 01:58
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...
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 08:22
6 juil. 2008 à 08:22
ok,
donc là dans ce code, si le mot est inclus dans la séquence des mots et il bien le dernier, le fonction retourne la valeur 1, sinon elle retourne 0?
c'ets juste?
merci
donc là dans ce code, si le mot est inclus dans la séquence des mots et il bien le dernier, le fonction retourne la valeur 1, sinon elle retourne 0?
c'ets juste?
merci
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
6 juil. 2008 à 13:30
6 juil. 2008 à 13:30
Ben oui, tu as essayé au moins ?
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 13:42
6 juil. 2008 à 13:42
ca retourne tjrs 1 quelque soit la position, mais moi je veux quil verifie les 2conditions à la fois : inclusion et dernier element.
merci
j'attends ta reponse.
merci
j'attends ta reponse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
6 juil. 2008 à 23:40
6 juil. 2008 à 23:40
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
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
7 juil. 2008 à 08:34
7 juil. 2008 à 08:34
merci mamiemando :)
ca bon ca marche
ca bon ca marche
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
7 juil. 2008 à 10:03
7 juil. 2008 à 10:03
Nickel, bonne continuation :-)
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
7 juil. 2008 à 18:03
7 juil. 2008 à 18:03
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; }
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
7 juil. 2008 à 21:02
7 juil. 2008 à 21:02
Il me faut le code complet. Idéalement ouvre un nouveau sujet puisqu'on a résolu celui-là (sinon je serai la seule personne à lire ce fil de discussion).
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
9 juil. 2008 à 00:41
9 juil. 2008 à 00:41
Pas tout de suite mais bientôt, promis :-)
4 juil. 2008 à 20:52
c tres gentil de ta part :)
je vais essayé ta version et vais t'informaer le resultat.
a+
5 juil. 2008 à 23:13
vus avez une idéée:
ya un warning
6 juil. 2008 à 00:07
juste le teste sile moty est le dernier des mots constituant les séquences des mots.
merci