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

  FORUM HardWare.fr
  Programmation
  C

  Découpage chaine de caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Découpage chaine de caractère

n°2122372
filoo85
Posté le 19-01-2012 à 17:28:05  profilanswer
 

Bonjour à tous,
 
Voila j'ai fait une petite fonction pour découper une chaine de caractère en utilisant strtok () selon un séparateur,sauf que j'affiche tous d'un coup. comment je pourrai faire pour stocker le retour de strtok () dans un tableau de chaine de caractère, afin de pouvoir utiliser par la suite chaque partie de la chaine de caractère, comme par exemple pour la chaine de caractère"hello \t world" récupéré hello dans la première case et world dans la deuxième, donc un tableau qui s'adapte à chaque chaine de caractère, mais je ne sais pas comment faire, si quelqu'un peut m'aider svp.
 
voila le code:
 

Code :
  1. int main ()
  2.     {
  3.    char buffer[]= "hello\t world";
  4.    fct_decoupe(buffer);
  5.     return 0;
  6.     }
  7. char fct_decoupe(char buffer[])
  8. {
  9.  char *pch = strtok (buffer,"\t" );
  10.  while (pch != NULL)
  11.  {
  12.  printf ("%s\n",pch);
  13.  pch = strtok (NULL, "\t" );
  14.  }
  15.  return 0;
  16. }


 
Merci d'avance.


Message édité par filoo85 le 19-01-2012 à 17:43:56
mood
Publicité
Posté le 19-01-2012 à 17:28:05  profilanswer
 

n°2122415
breizhbugs
Posté le 19-01-2012 à 21:23:41  profilanswer
 

bonjour,
tu fais taille=strlen(pch) pour avoir la taille du token puis nouvellechiane=malloc((taille +1)*sizeof(char)), puis strcpy(nouvellechaine, pch) et ca devrais le faire


---------------
Seul Google le sait...
n°2122620
filoo85
Posté le 20-01-2012 à 16:09:56  profilanswer
 

Merci pour ta réponse ça marche.

n°2122683
Sve@r
Posté le 21-01-2012 à 11:23:44  profilanswer
 

filoo85 a écrit :

breizhbugs a écrit :

bonjour,
tu fais taille=strlen(pch) pour avoir la taille du token puis nouvellechiane=malloc((taille +1)*sizeof(char)), puis strcpy(nouvellechaine, pch) et ca devrais le faire


 
Merci pour ta réponse ça marche.


 
Salut
Si tu es sur un système récent tu peux utiliser strdup() qui fait tout ça tout seul.
 
De plus, si tu n'as pas perdu ta chaine originelle alors c'est inutile de "recopier" l'intégralité des sous-chaines car strtok() l'a modifiée en y insérant des '\0' là où il y avait le séparateur. Donc suffit juste de mémoriser chaque pointeur renvoyé, ils pourront être réutilisés comme des chaines entières...

Message cité 1 fois
Message édité par Sve@r le 21-01-2012 à 11:27:35
n°2122690
gilou
Modérateur
Modzilla
Posté le 21-01-2012 à 12:52:24  profilanswer
 

Sve@r a écrit :


 
Merci pour ta réponse ça marche.


 
Salut
Si tu es sur un système récent tu peux utiliser strdup() qui fait tout ça tout seul.
 
De plus, si tu n'as pas perdu ta chaine originelle alors c'est inutile de "recopier" l'intégralité des sous-chaines car strtok() l'a modifiée en y insérant des '\0' là où il y avait le séparateur. Donc suffit juste de mémoriser chaque pointeur renvoyé, ils pourront être réutilisés comme des chaines entières...[/quotemsg]C'est aussi ce que j'aurais fait.
On peut même éviter de mémoriser les pointeurs, si on se rappelle l'adresse de fin (ou la la longueur) de la chaîne originelle, et qu'on avance de sous chaîne en sous chaîne, tant qu'on a pas dépassé l'adresse de fin (la ça dépend de ce qu'on veut faire avec les sous chaines).
A+,


Message édité par gilou le 21-01-2012 à 12:55:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2122693
breizhbugs
Posté le 21-01-2012 à 13:18:34  profilanswer
 

Effectivement, j'avais oublié le strdup qui le fait très bien.
Toutefois l'inconvénient de strdup() à mon avis est qu'il cache le malloc() sur la nouvelle chaine et qu'on risque de moins penser à appeler le free().
Enfin bref faut bien lire la doc quoi...


---------------
Seul Google le sait...
n°2122696
gilou
Modérateur
Modzilla
Posté le 21-01-2012 à 14:33:32  profilanswer
 

L'inconvénient majeur de strdup, c'est qu'il était pas dispo dans toute les implems. Fallait se faire le sien sinon (trivial).
C'est peut être plus le cas de nos jours.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

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

  Découpage chaine de caractère

 

Sujets relatifs
Communication socketEnvoie d'une chaine de caractère
Macro Word recherche chaine avec retour a la ligneEnvoie de chaine de caractére
[Resolu] probleme en C : comparaison de chaine de caractere 
Plus de sujets relatifs à : Découpage chaine de caractère


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