si quelqu'un pourra m'aider à résoudre ce problème !
il s'agit d'écrire un prog.C qui cherche une chaine de carctère mot1 dans un autre mot2 et returne mot1 si trouvé..
j'ai essayé et ca n'a pas marché

/*voici mon algorithme:*/ #include<stdio.h> #include<string.h> #include<conio.h> void recherche (char ch1[],char ch2[]) { int i=0;int j=0; if(strlen(ch1)<=strlen(ch2)) { while(( (i<strlen(ch1)) && (j<=strlen(ch2)) || (i<=strlen(ch1)) )) { if(ch1[i]==ch2[j]) { i++; j++; } else { i=0; j++; } } printf("i= %d j= %d\n",i,j); if (i-1==strlen(ch1)) printf("le mot est trouve"); else printf("le mot n'est pas trouve"); } else printf("chaine courte"); } int main() { char mot[10]; char motsource[20]; printf("donner la chaine source:\n"); gets(motsource); printf("donner le mot a rechercher:\n"); gets(mot); recherche(mot,motsource); getch(); }
Pollux (./7) :
alors la toute première chose qu'il faut remarquer, c'est que ta méthode ne peut pas marcher telle quelle : si le mot que tu cherches est "coucou !", ton algorithme ne pourra pas le trouver dans la chaîne "ah que coucoucou !" -- pourquoi ? quand il va commencer à lire "coucoucou !", il va prendre le premier "cou", se rendre compte que c'est bien le début de "coucou !", il va prendre le deuxième "cou", se rendre compte que c'est bien la suite de "coucou !", mais arrivé au troisième "cou", ça ne correspond plus à la suite de "coucou !", donc il va revenir au début de la chaîne -- manque de bol, il reste plus que "cou !" dans la chaîne, donc il va pas trouver "coucou !" en entier alors qu'il était bien dans la chaîne de départ...
godzil@localhost ~ $ cat strsrch.c #include<stdio.h> #include<string.h> void recherche (char ch1[],char ch2[]) { int i=0;int j=0; if(strlen(ch1)<=strlen(ch2)) { while( (i<strlen(ch1)) && (j<strlen(ch2)) ) { if(ch1[i]==ch2[j]) { i++; j++; } else { i=0; j++; } } printf("i= %d j= %d\n",i,j); if ( i==strlen(ch1)) printf("le mot est trouve"); else printf("le mot n'est pas trouve"); } else printf("chaine courte"); } int main() { char chaine[] = "coucoucou !"; char mot[] = "coucou !"; recherche(mot, chaine); } godzil@localhost ~ $ gcc strsrch.c godzil@localhost ~ $ ./a.out i= 0 j= 11 le mot n'est pas trouvegodzil@localhost ~ $
#include <regex.h> ... bool regexMatch(const char* mot1 , const char* mot2 , const int options ) { int status; regex_t result; if ( regcomp(&result, mot1, options ) != 0 ) return false; status = regexec(&result, mot2, (size_t) 0, NULL, 0); regfree(&result); if (status != 0) return false; return true; }
spomky (./10) :
Pourquoi ne pas utiliser les expressions régulières?
nEUrOO (./13) :
Heu si tu veux rechercher mot1 dans mot2, les regexp c'est un peu comment dire... utiiliser une bite d'elephant pour enculer une mouche, un peu: ca sert a rien... enfin, c'est trop gros koi.
#include <stdio.h> #define a(x,y) y##x int main(){ a(ruct,st){a (e_t,siz) n;char b[99] ;}x={},y={}; for(;;){int c=a( har, getc )(); if(c <0)a (ak, bre) ;if( (+y. n<a( eof, siz) y.b) &&a( num, isal )(c) )y.b [y.n ++]= c;a( lse, e)x= y.n> x.n? y:x,/*a*/y.n =0;} printf("%.*" "s\n",x.n,x .b); return!1;}
./pluslong < dictionnaire)
>> résultat : anticonstitutionnellement