IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Vérifier qu'une chaîne de caractères ne contient que des entiers positifs [Débutant(e)]


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 69
    Points : 53
    Points
    53
    Par défaut Vérifier qu'une chaîne de caractères ne contient que des entiers positifs
    Hello à tous !

    Bon j'avoue, le titre est assez long mais très explicite.

    En effet, je réalise un programme auquel je passe un certains nombre de paramètres que je récupère via argv[]

    Un de ces paramètre doit être un entier positif coute que coute, mais je n'arrive pas à trouver un moyen de vérifier cette condition.

    Existe-t-il une fonction?

    Merci pour votre aide infiniement précieuse.

    je vais continuer de chercher de mon côté.

    A bientot,

    Matt !

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Tu peux tenter de faire une conversion avec strtoul() ou sscanf()...

    Thierry

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pmatt Voir le message
    Bon j'avoue, le titre est assez long mais très explicite.

    En effet, je réalise un programme auquel je passe un certains nombre de paramètres que je récupère via argv[]

    Un de ces paramètre doit être un entier positif coute que coute, mais je n'arrive pas à trouver un moyen de vérifier cette condition.

    Existe-t-il une fonction?
    Il n'y a pas de fonction standard, mais on peut faire la sienne. Une simple analyse de la chaine permet de savoir si on a affaire à un entier positif. Si ça commence par un '-' ou si on trouve un '.' (ou une ',' selon la localisation) c'est mal barré...

    Il faut bien étudier les cas, mais à priori une simple appartenance de chaque caractère à l'ensemble 0-9 devrait suffire si la représentation est strictement décimale. Il faudrait qu'on sache quels sont les représentations acceptées.

    Nota : un '+' en tête est acceptable (mais si c'est peu conventionnel).

    Une fois la chaine vérifiée, une conversion est possible avec strtol() ou [C99] strtoull(). La conversion peut échouer, et il faut penser à vérifier que errno est bien différent de ERANGE.

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Tu peux tenter de faire une conversion avec strtoul() ou sscanf()...
    Une valeur < 0 sera convertie silencieusement. Je ne pense pas que ce soit ce que souhaite le P.O.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Une valeur < 0 sera convertie silencieusement. Je ne pense pas que ce soit ce que souhaite le P.O.
    Je n'avais effectivement pas lu cette partie du man:

    Citation Envoyé par Man de strtoul()
    La fonction strtoul() renvoie soit le résultat de la conversion, soit, s'il y avait un signe moins, l'inverse du résultat de la conversion à moins que la valeur originale provoque un débordement, auquel cas strtoul() renvoie ULONG_MAX et errno contient le code d'erreur ERANGE. La même chose est vraie pour strtoull() avec ULLONG_MAX à la place de ULONG_MAX.
    Au temps pour moi! Il est effectivement nécessaire de procéder à une analyse préalable de la chaîne avant d'effectuer la conversion.

    Thierry

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/10/2011, 02h17
  2. Vérifier si une chaîne de caractère est contenu dans une autre
    Par Marvelll dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 22/02/2010, 15h54
  3. Tester si une chaîne de caractère ne contient que des numéros.
    Par sasy22 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 07/04/2008, 19h05
  4. Réponses: 2
    Dernier message: 20/10/2007, 16h54
  5. Réponses: 6
    Dernier message: 14/12/2006, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo