Analyse syntaxique

fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010 - 2 mars 2010 à 01:31
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 6 mars 2010 à 13:23
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

dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
2 mars 2010 à 09:21
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 !
0
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010
2 mars 2010 à 20:39
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.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
6 mars 2010 à 12:23
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.
0
fadiam Messages postés 15 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 16 mars 2010
6 mars 2010 à 12:29
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?
0

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

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
6 mars 2010 à 13:23
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.
0
Rejoignez-nous