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

Messages postés
90
Date d'inscription
lundi 20 février 2006
Dernière intervention
6 mars 2007
- 19 déc. 2006 à 20:53 - Dernière réponse :
Messages postés
90
Date d'inscription
lundi 20 février 2006
Dernière intervention
6 mars 2007
- 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

Meilleure réponse
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
20 déc. 2006 à 16:07
3
Merci
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++ (@++)<!--

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
510
Date d'inscription
lundi 27 novembre 2006
Dernière intervention
5 juillet 2009
19 déc. 2006 à 21:03
0
Merci
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
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
19 déc. 2006 à 21:31
0
Merci
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
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
19 déc. 2006 à 21:46
0
Merci
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
Messages postés
25
Date d'inscription
lundi 20 mars 2006
Dernière intervention
27 septembre 2008
20 déc. 2006 à 15:42
0
Merci
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__
Messages postés
90
Date d'inscription
lundi 20 février 2006
Dernière intervention
6 mars 2007
20 déc. 2006 à 19:08
0
Merci
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
Messages postés
90
Date d'inscription
lundi 20 février 2006
Dernière intervention
6 mars 2007
20 déc. 2006 à 20:15
0
Merci
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.