Splitting a string

dud1410 Messages postés 31 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 9 novembre 2009 - 5 sept. 2008 à 12:42
dud1410 Messages postés 31 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 9 novembre 2009 - 11 sept. 2008 à 12:25
salut tout le monde:j'ai une chaine de caractere de la forme:"name  N1 / Category" et je voudrais la decomposer de facon a avoir chaque mot dans une chaine a part est ce que quelqu'un peut m'aider!!!!

5 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
5 sept. 2008 à 13:19
C'est simple tu utilises les fonction strcspn et/ou strstr pour rechercher les espaces.
quand tu trouves un espace tu avances le pointeur de lecteur, et tu recherches a nouveau l'espace.

En cherchant bien sur le Net il doit y avoir des exemples.
0
dud1410 Messages postés 31 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 9 novembre 2009
5 sept. 2008 à 13:23
merci beaucoup
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 sept. 2008 à 16:03
void token (char *c, char **ptr, char occ)
{
    char *d = c;
    int i = 0;

    while(1) {
        if(*c == occ) {
            *c = 0;
             ptr[i++] = d; d = c+1;
        }
        else if(!*c) {
            ptr[i] = d;
            break;
        }
        c++;
    }
}

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

token(buffer, ptr, ' ');

ptr[0] contiendra "salut", ptr[1] contiendra "a" et ptr[2] contiendra "tous".

Attention, il ne s'agit que de pointeurs. Ils restent donc dépendants de la chaîne principale (qui ce retrouve donc modifiée). Si tu écrase la chaîne principal, les pointeurs risque de ne plus pointer sur la bonne location.

Si tu veux garder la chaîne principal intacte ou si tu veux la réutiliser pour autre chose, voici une autre routine qui sauvegarde les chaînes dans un tableau à  2 dimensions tout en laissant la principale inchangée:

char buffer[] = "salut a tous", *c = buffer;
char tab[3][12]; // <- 3 mots de chacun 11 char + 0 de fin de chaine
int j = 0;

do {
    int k = 0;    while(*c !' ' && *c) tab[j][k++] *c++;
    tab[j++][k] = 0;
} while(*c++);

tab[0] contiendra "salut", tab[1] contiendra "a" et tab[2] contiendra "tous"

C++ (@++)<!--
0
cs_wogkiller Messages postés 6 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 12:11
les classes CString ou String ont des méthodes permettant de faire ça dirrectement en donnant le ou les caractères de séparations.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dud1410 Messages postés 31 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 9 novembre 2009
11 sept. 2008 à 12:25
oui je suis d'accord avec wogkiller mais quand meme merci beaucoup pour votre aide sakingdom
0
Rejoignez-nous