Analyser une saisie utilisateur [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
-
Messages postés
2
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007
-
Bonsoir,

Je souhaite découper une chaine de caractères pour pouvoir la traiter par la suite, y a-t-il des fonctions qui permettent d'éliminer des délimiteurs "-" et espace puis vérifier si l'utilisateur à saisie les bonnes valeurs?

En vous remerciant par avance.

2 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Voici un routine que j'utilise régulierement:

char test[] = "salut-a tous";
char *ptr[3], *c = &test[0], *d = c;
int i = 0;

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

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


Il te suffis ensuite d'effectuer les test voulu sur les pointeurs

Attention.
La chaine principal se retrouvera modifié et les ptr en serons
dépendant. Si tu écrase ta chaine initiale et que tu utilise les ptr
immédiatement après, ils risquent de ne plus pointer sur quelque chose
de valide à l'utilisation. Voici une routine qui stock les "nouvelles"
chaines dans un tableau à deux dimentions tout en laissent la chaine
initiale inchangé:


char buffer[] = "salut-a tous";

char tab[3][10]; // <- 3 mots de chacun 9 char + 0 de fin de chaine

int i 0, j 0;


do

{

    int k = 0;

    while(buffer[i] != ' ' && buffer[i] != '-' && buffer[i]) tab[j][k++] = buffer[i++];

    tab[j++][k] = 0;

} while(buffer[i++]);

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

C++ (@++)<!--
Messages postés
2
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
30 janvier 2007

Merci SAKingdom pr ta réponse.