Analyse syntaxique

Signaler
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour à tous.
je cherche à réaliser une fonction qui modifie une chaine de caractères.elle n'accepte que les "chiffres" de 0 à 9 et quelques autres caractères. J'ai pensé mettre ces caractères dans un tableau et comparer chaques lettres de la chaine aux cases du tableau. est ce une bonne idée?

Sinon comment convertit-on une chaine de caractères en tbleau d'entier? code ascii? mais les caractères sont en fait des entiers si j'ai bien compris.

Merci de vos réponses.

5 réponses

Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015

tu peux aussi faire le test suivant :
if (chaine[index] >= '0' && chaine[index] <= '9')
{
// C'est un chiffre
}
else
{
// C'est autre chose
}


Les caractères (ASCII, pas Unicode) ne sont pas des entiers mais des octets, dont on peut récupérer la valeur en les convertissant en entiers


Coin coin !
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010

merci beaucoup.

j'aurai une autre requete, si ce n'est trop demander...

En fait le but est d'entrer des numéros de télphones.
Lorsque l'on entre une suite de cacactères, sans espaces, (ce ne soit etre que des cacactères entre 0 et 9), ils sont automatiquement regroupés par défault par paire. ex : 2938362939 : 29 38 36 29 39

De plus, il ya des groupes de caractères "chiffres" séparés par des espaces.
Il ne doivent pas exeder 4 caractères. lorsqu'ils y a plus de 4 caractères à la suite sans espaces, ils doivent être réorganisés.Si c'est un nombre paire, on les regroupes pas paire, si impaire, on les regroupe comme suit
ex : 11111 : 1 11 11

dernieère question : la touche entrée(return je ne sais pas comment on l'appelle) est-elle lue par la fonction strlen?

merci beaucoup pour vos réponses.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

strlen compte les caractères jusqu'au zéro terminal. S'il y a un \n avant le 0 terminal il est compté.
Mais la présence ou non d'un \n dépend de la façon dont tu récupères la chaîne (scanf...).

Concernant ton problème, peut être que strtok s'adapterait très bien à ton problème.
Messages postés
15
Date d'inscription
samedi 6 février 2010
Statut
Membre
Dernière intervention
16 mars 2010

Merci.
C'est vrai que la taille est différente selon que j'utilisai, fgets, gets ou scanf.
Il parait que fgets est la plus sécurisée?
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Effectivement. Le risque avec un scanf par exemple, c'est que l'utilisateur entre une chaîne plus longue que la taille de la chaîne de réception. Comme il n'y a aucun contrôle, ça peut faire complètement planter le programme.

Avec fgets, on peut préciser d'arrêter de lire s'il y a trop de caractères, donc pas de souci.