Splitting a string

Signaler
Messages postés
31
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
9 novembre 2009
-
Messages postés
31
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
9 novembre 2009
-
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

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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.
Messages postés
31
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
9 novembre 2009

merci beaucoup
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
6
Date d'inscription
mercredi 12 mars 2008
Statut
Membre
Dernière intervention
11 septembre 2008

les classes CString ou String ont des méthodes permettant de faire ça dirrectement en donnant le ou les caractères de séparations.
Messages postés
31
Date d'inscription
lundi 25 août 2008
Statut
Membre
Dernière intervention
9 novembre 2009

oui je suis d'accord avec wogkiller mais quand meme merci beaucoup pour votre aide sakingdom