Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1247 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [TP en C ] Rechercher mot dans chaîne caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[TP en C ] Rechercher mot dans chaîne caractère

n°252400
taratata54
Posté le 24-11-2002 à 09:42:28  profilanswer
 

"Le TP consiste dans un premier temps à rechercher un mot (ou motif) dans une chaine de caractère et le remplacer par un autre mot choisi auparavant.  
Ensuite,  faire cette même recherche et ce même remplacement pour un mot dans un fichier."
Je débute en C et je galère pour ce TP.
Merci à ceux ou celles qui voudraient bien m'aider !

mood
Publicité
Posté le 24-11-2002 à 09:42:28  profilanswer
 

n°252401
gilou
Modérateur
Modzilla
Posté le 24-11-2002 à 09:53:02  profilanswer
 

Boyer-Moore?
http://www-igm.univ-mlv.fr/~lecroq/string/node14.html
ou d'autres:
http://www-igm.univ-mlv.fr/~lecroq/string/index.html
A+,


Message édité par gilou le 24-11-2002 à 09:53:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°252402
darklord
You're welcome
Posté le 24-11-2002 à 10:05:09  profilanswer
 

gilou > joli :jap:


---------------
Just because you feel good does not make you right
n°252531
taratata54
Posté le 24-11-2002 à 16:32:21  profilanswer
 

T bien gentil mais je suis newbie alors faudrait peut etre que quelqu'un m'explique.Sinon moi je dis UP !!!!!
Merci d'avance car la je suis dans le trou total

n°252551
zastaph
Posté le 24-11-2002 à 17:45:32  profilanswer
 

Il te faut utiliser la fonction  

Code :
  1. char *strstr( const char *string, const char *strCharSet );


strstr(ch,"DTC" );
elle renvoit un pointeur sur la 1ère sous-chaîne commençant par le 2ème argument "DTC" ou renvoit NULL si ya pas.
Le principe c'est de trouver où est le motif (par strstr), de recopier le début de la chaîne dans une autre, d'y concaténer le motif de remplacement puis le reste de la chaîne originale.
Hum, plus clairement :
ch="salut taratata54" et tu veux mettre "gzip" à la place de "tar"  :whistle:  
tu copies la debut dans ch2 -> ch2="salut "
tu rajoutes "gzip" -> ch2="salut gzip" avec strcat
puis tu termines -> ch2="salut gzipatata54"
sachant que strstr(ch,"tar" ) va renvoyer un pointeur sur le t de taratata54
 
bon d'accord c pas super clair  :sweat:  mais je doit avoir une vieille fonction qui traine dans mes sources, je vais te la poster pour t'aider


---------------
yo, nippon ichi
n°252558
zastaph
Posté le 24-11-2002 à 18:08:19  profilanswer
 

voila, j'espère que ça va t'aider un peu
c'est peut être pas la meilleure méthode mais au moins ça marche

Code :
  1. // texte contient la chaine originale
  2. // str contient la chaine à remplacer
  3. // str2 contient le motif de remplacement
  4. char *c_ou,*c_ou_old,*resultat;
  5. int taille=0,taille_old=0,pb=0;
  6. c_ou=c_ou_old=texte;
  7. if((resultat=(char*)malloc(sizeof(char)))==NULL)  exit(1);
  8. while((c_ou=strstr(c_ou,str))!=NULL && pb==0) //c_ou pointe sur la 1ère sous-chaine commençant par str
  9. {
  10.  taille+=c_ou-c_ou_old+strlen(str2)+1; // taille totale de la nouvelle chaine après remplacement
  11.  if((resultat=(char*)realloc(resultat,sizeof(char)*taille))==NULL)
  12.  {
  13.   printf("DTC achete de la ram" );
  14.   pb=1;
  15.  }
  16.  else
  17.  {
  18.   memcpy(resultat+taille_old,c_ou_old,c_ou-c_ou_old); //copie la partie entre le dernier motif et le motif à remplacer
  19.   taille_old+=c_ou-c_ou_old;
  20.   memcpy(resultat+taille_old,str2,strlen(str2));  //copier le nouveau motif
  21.   taille_old+=strlen(str2);
  22.   c_ou_old=c_ou+strlen(str);
  23.   c_ou++;       // c_ou pointe sur un motif donc strstr ne va pas chercher + loin, donc on le force en allant un cran à droite
  24.  };
  25. };
  26. if (pb==0)
  27. {
  28.  taille+=(texte+strlen(texte))-c_ou_old+1;
  29.  if((resultat=(char*)realloc(resultat,sizeof(char)*taille))==NULL) //allouer pour copier la fin de la chaine
  30.   printf("DTC achete de la ram" );
  31.  else
  32.  {
  33.   memcpy(resultat+taille_old,c_ou_old,(texte+strlen(texte))-c_ou_old);
  34.   taille_old+=((texte+strlen(texte))-c_ou_old);
  35.   *(resultat+taille_old)='\0';         //placer le caractère de fin de chaine
  36.  };
  37. };
  38. // la nouvelle chaine modifiée est : resultat


Pour les fichier, c'est la même logique, ouvre l'original et en parallèle un autre en écriture. tu recopies jusqu'à trouver le motif que tu remplaces par le nouveau puis tu continues  :pt1cable:  
 
allez, bonne chance pour ton TP  :hello:


---------------
yo, nippon ichi
n°252561
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 24-11-2002 à 18:12:37  profilanswer
 

t'es sympa mais on n'a dit qu'on faisait pas les devoirs des autres.
 
en plus un newbie va rien capter du tout: on reponds au gens en fonction de leurs connaissance
 
edit: en plus ta solution est loin d'etre tres propre


Message édité par Taz@PPC le 24-11-2002 à 18:14:28

---------------
du bon usage de rand [C] / [C++]
n°252569
zastaph
Posté le 24-11-2002 à 18:24:55  profilanswer
 

Taz@PPC a écrit a écrit :

t'es sympa mais on n'a dit qu'on faisait pas les devoirs des autres.




 
j'y ai pas tout fait, il reste encore le truc avec les fichiers  :sarcastic:  
mon code n'est pas propre (c'est un vieux code qui trainait) mais tu vas surement le nettoyer si tu as le temps.
 
n'empeche que je v tenir compte de tes remarques  :jap:


---------------
yo, nippon ichi
n°252576
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 24-11-2002 à 18:37:23  profilanswer
 

le but c'est d'abord l'algo, ensuite l'implémentation
 
ton code c'est du pur C imbitable et a l'algo que je devine, j'aurais pas fait comme ca :D
 
 
taratata54 > quel est ton niveau de connaissance sur les pointeurs et les fonctions de la biblitoheque standard, ton niveau d'etudes?
 
edit: tres beau le sizeof(char)  :p


Message édité par Taz@PPC le 24-11-2002 à 18:37:55

---------------
du bon usage de rand [C] / [C++]
n°252577
zastaph
Posté le 24-11-2002 à 18:42:57  profilanswer
 

taz@ppc > ca m'intéresse de savoir comment tu aurais fait
le sizeof(char) c'est pour être plus explicite que 1 pour ceux qui ne le savent pas


---------------
yo, nippon ichi
mood
Publicité
Posté le 24-11-2002 à 18:42:57  profilanswer
 

n°252585
taratata54
Posté le 24-11-2002 à 19:02:35  profilanswer
 

Merci quand même d'avoir répondu à ma demande d'aide, même si on fait pas les devoirs des autres !...
Bien qu'étudiant bac+5, mon niveau en informatique est quasiment nul, le prof nous a simplement dit de s'autoformer avec les bouquins et les exo en classe. Alors pour l'instant, je découvre.
J'ai vu les tableaux, je commence les fichiers, mais j'y vais doucement.
Merci à vous tous pour votre aide !
CIAO

n°253922
taratata54
Posté le 26-11-2002 à 13:21:44  profilanswer
 

up

n°253957
MrX
Posté le 26-11-2002 à 13:43:32  profilanswer
 

si tu ve de l'aide, ben v'la un conseil, tente d'abord le vb, c 15 fois plus simple pour comprendre la structure d'un programme, y a pa a ce faire chier avec les pointeurs et compagnie, et ca aura le merite de t'apprendre pensée tes programmes, et plus ca s'apprend vite =) (jai mis 2 jours). Enfin c n'est que mon humble avis....

n°253958
MrX
Posté le 26-11-2002 à 13:44:10  profilanswer
 

et meme si tu ve pe t'expliquer comment reglé ton probleme en vb =)

n°253961
darklord
You're welcome
Posté le 26-11-2002 à 13:55:39  profilanswer
 

was here [:yaisse2]


---------------
Just because you feel good does not make you right
n°253963
lorill
Posté le 26-11-2002 à 13:58:19  profilanswer
 

MrX a écrit a écrit :

une horreur




[:vomi]

n°253965
MrX
Posté le 26-11-2002 à 14:03:43  profilanswer
 

a bon ?? ou ca ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [TP en C ] Rechercher mot dans chaîne caractère

 

Sujets relatifs
liste chaine en c (truc de presque de basse)[PHP] saucissonnner une chaine de charactere
[mysql]requete de type arbre (rechercher n-peres][C] Defilement d'un caractere a une certaine vitesse...
[PHP] Nombre d'occurences d'un mot dans une chaine de caractères[PHP] Extraire les deux premiers caractères d'une chaîne - RESOLU
quelle est la fonction pour récupérer un caractére sans taper entrée[PHP]Rechercher tout les liens dans une page!
[ALGO] Parsing de chaine utilisant des * et ?qqn connait une fonction qui met une chaine de cara en majuscules ??
Plus de sujets relatifs à : [TP en C ] Rechercher mot dans chaîne caractère


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR