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

  FORUM HardWare.fr
  Programmation
  C

  Extraction de mots d'une chaîne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction de mots d'une chaîne

n°1514987
lamorkytu
Posté le 15-02-2007 à 12:58:10  profilanswer
 

:hello:  bonjour tlm
 
Je dois réaliser, en C, un programme qui doit permettre à partir d'une chaine de caractères d'extraire des mots selon des délimiteurs passés en paramètres.
 
Petit exemple,à partir de :
  >leprogramme "unechaine,àdécou-per" ",.-"
  je souhaite obtenir :
      >unechaine
      >àdécou
      >per
 
Mon problème majeur est que je n'ai pas de niveau en C ^^.
 
 
Malgré cela, j'ai une première ébauche (dans cette ébauche, chacun des délimiteurs est passé séparément en paramètre); j'utilise strtok() afin de découper la chaine.
int main(int argc, char *argv[])
{
  while(1){
     char * str="";    //str est une chaine de caractères à découper
     char * pch="";   //pch est une chaine : les caractères restant à découper
     char * delimiters[10];   //delimiters : les caractères utilisés pour découper str, 10 maximums
     int i=0;      
 
     str=argv[1];   //str reçoit la premier argument : la chaîne à découper
        //ensuite je boucle : chacun des autres paramètres est inscrit dans 'delimiters'
 for (i=1;i<=argc;i++) {
 delimiters[i]=argv[i+1];}
 
     //ensuite je découpe la chaine selon les délimiteurs
     pch = strtok(str,*delimiters);
     while (pch != NULL)
     {printf ("%s\n",pch);
       pch = strtok (NULL,*delimiters);}
   }
  return 0;
}
 
Donc voila mon problème : ça ne marche pas ^^
En plus, je souhaiterais passer tous les délimiteurs en tant qu'un seul paramètre ("*-," par exemple mais est-il possible dans ce cas de prendre l'espace comme paramètre ?
 
Le premier prototype du programme était :
 
int main(int argc, char *argv[])
{
  while(1){
     char str[500]; //fixer une longueur de texte max en nb de caracteres
     char * pch;
     const char * delimiters[10]; //fixer un nombre de délimiteurs max
 
     printf("Veuillez entrer le texte : " );
     gets(&str);
     printf("Veuillez entrer les delimiteurs : " );
     gets(&delimiters);
     
     pch = strtok(str,delimiters);
     while (pch != NULL)
     {printf ("%s\n",pch);
       pch = strtok(NULL,&delimiters); }
  }
  return 0;
}
------> ceci marche, mais je veux passer la chaine à découper et les délimiteurs en paramètres !
Merci d'avance à ceux qui sont doués en C ^^

Message cité 1 fois
Message édité par lamorkytu le 15-02-2007 à 12:59:08
mood
Publicité
Posté le 15-02-2007 à 12:58:10  profilanswer
 

n°1515058
matafan
Posté le 15-02-2007 à 14:31:53  profilanswer
 

Ca devrait être char delimiters[10], pas char * delimiters[10]. Tu veux un tableau de 10 chars, pas un tableau de 10 char *. Et puis gets() c'est mal car tu ne contrôles pas le nombre de charactères lus ; utilises plutôt fgets().

n°1515957
Sve@r
Posté le 17-02-2007 à 13:21:39  profilanswer
 

matafan a écrit :

Ca devrait être char delimiters[10], pas char * delimiters[10]. Tu veux un tableau de 10 chars, pas un tableau de 10 char *.


Oui mais t'as pas remarqué qu'il stocke dans son tableau "delimiters" les pointeurs "argv[i]" ? En fait, niveau syntaxe c'est correct (il stocke un pointeur dans un tableau de pointeurs)... c'est au niveau "logique" que c'est pas bon
 

lamorkytu a écrit :

Code :
  1. char * delimiters[10];   //delimiters : les caractères utilisés pour découper str, 10 maximums
  2.         //ensuite je boucle : chacun des autres paramètres est inscrit dans 'delimiters'
  3. for (i=1;i<=argc;i++) {
  4. delimiters[i]=argv[i+1];
  5. }



 
En faisant ça, si tu passes  "+ - ;" à ton programme, t'auras :

  • delimiters[1] contient "+"
  • delimiters[2] contient "-"
  • delimiters[3] contient ";"

(au passage t'auras sauté "delimiters[0]" ce qui est dommage)
 
Alors qu'en fait, il faudrait que "delimiters[0]" contienne '+', "delimiters[1]" contienne '-' et "delimiters[2]" contienne ';' (tu remarqueras les guillemets simples montrant ici des caractères et non des chaînes de caractères) => fais un "man strtok()" pour mieux comprendre le contenu du paramètre "char *delim"


Message édité par Sve@r le 17-02-2007 à 13:35:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

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

  Extraction de mots d'une chaîne

 

Sujets relatifs
Extraction de chaînes avec sscanf et des expressions régulièresLire une chaine
Traitement sur une chaîne de caractèrecombler les blancs dans une chaine de caractere
modification d'une chaine de caractere dans un fichierchaine de caractère
Besoin d'aide pour un remplacement de chaine par expression régulière.Concaténation de chaine
recherche d'un mot dans une chaineextraire des mots en fonction de leur mise en forme
Plus de sujets relatifs à : Extraction de mots d'une chaîne


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