Découper une chaine de caractére dans un seul char [Résolu]

logant83 90 Messages postés lundi 20 février 2006Date d'inscription 6 mars 2007 Dernière intervention - 19 déc. 2006 à 20:53 - Dernière réponse : logant83 90 Messages postés lundi 20 février 2006Date d'inscription 6 mars 2007 Dernière intervention
- 20 déc. 2006 à 20:15
Bonsoir, voila enfaite j'aimerai découper une chaine de caractères et placer chacun
de mots dans un char pour par exemple pouvoir y avoir accés simplement en fesant
monchar[0] , monchar[1]

ou cas ou sa ne serait pas clair je vous montre a quoi je pense

exemple j'ai la phrase : "Je suis un garcon"

j'aimerai pouvoir placer chaque mot dans le char de facon que monchar[0] correspondent
à "Je" et monchar[1] correspondent à "suis" et ainsi de suite.

Avez-vous une idée ?

Bonne soirée.
Afficher la suite 

Votre réponse

7 réponses

SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 20 déc. 2006 à 16:07
+3
Utile
Mouais. Peut-être pas la meilleur des solutions. Il va faloir doubler la mémoire du buffer:

char buffer[256] = "salut a tous";
char *ptr[3];

ptr[0] = strtok(buffer," ");
ptr[1] = strtok(0, " ");
ptr[2] = strtok(0, "\0");

C++ (@++)<!--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
Bling 182 510 Messages postés lundi 27 novembre 2006Date d'inscription 5 juillet 2009 Dernière intervention - 19 déc. 2006 à 21:03
0
Utile
Bonjour,

Essaie voir avec char * strsep (char **dest, const char *delim);

La phrase à découper est dans dest, et à chaque appel strsep renvera le "mot" suivant, et NULL une fois arrivé en fin de chaine.

Par contre, ta chaine originale (dest) est modifiée à chaque appel de cette fonction...
Commenter la réponse de Bling 182
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 19 déc. 2006 à 21:31
0
Utile
Mettre une chaine dans un char, non c'est impossible. Dans un tableau à
double dimention, oui c'est possible. J'ai pas trop le temps de faire
quelque chose de très optimisé ni très sécuritaire mais voici un exemple:


char buffer[256] = "Salut a tous";

char tab[32][32]; // <- 32 mots de chacun 32 char

int i 0, j 0;


while(1)

{

     int k = 0;

    while(buffer[i] != ' ' && buffer[i] != '\n' && buffer[i])

    {

        tab[j][k] = buffer[i];

        i++; k++;

    }

    tab[j][k] = 0;

    if(!buffer[i]) break;

    i++; j++;

}


tab[0] contien "Salut" tab[1] contien "a" et tab[2] contien "tous"
   
C++ (@++)<!--
Commenter la réponse de SAKingdom
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 19 déc. 2006 à 21:46
0
Utile
Petite précision:
char tab[32][32]; // <- 32 mots de chacun 31 char + caractère de fin de chaine ('\0' ou 0)

C++ (@++)<!--
Commenter la réponse de SAKingdom
bonjour__ 25 Messages postés lundi 20 mars 2006Date d'inscription 27 septembre 2008 Dernière intervention - 20 déc. 2006 à 15:42
0
Utile
il faut utiliser une fonction strtok(char*,const char*);

par exemple :

char *nom="salut a tous";
char *ptr;

ptr=strtok(nom," ");
nom=strtok(NULL," ");

nom => "a tous"
ptr => "salut"
Commenter la réponse de bonjour__
logant83 90 Messages postés lundi 20 février 2006Date d'inscription 6 mars 2007 Dernière intervention - 20 déc. 2006 à 19:08
0
Utile
merci bcp a tous pour vos code mais SAKingdom je comprend pas ou son stocké les mot de la phrase.. il sont dans ptr[0] ptr[1] ptr[2] et ainsi de suite ?
Commenter la réponse de logant83
logant83 90 Messages postés lundi 20 février 2006Date d'inscription 6 mars 2007 Dernière intervention - 20 déc. 2006 à 20:15
0
Utile
Escuse moi j'ai compris enfaite.

merci pour ton aide et l'aide des autres j'ai beaucoup mieu compris
tous cela :)

bonne soirée à tous.
Commenter la réponse de logant83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.