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

Signaler
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007
-
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007
-
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.

7 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
510
Date d'inscription
lundi 27 novembre 2006
Statut
Membre
Dernière intervention
5 juillet 2009
2
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...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Petite précision:
char tab[32][32]; // <- 32 mots de chacun 31 char + caractère de fin de chaine ('\0' ou 0)

C++ (@++)<!--
Messages postés
25
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
27 septembre 2008

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"
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007

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 ?
Messages postés
90
Date d'inscription
lundi 20 février 2006
Statut
Membre
Dernière intervention
6 mars 2007

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.