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 :

Amélioration de isdigit


Sujet :

C

  1. #1
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut Amélioration de isdigit
    Bonjour à tous

    J'ai chercher à créer une fonction plus complète ressemblant à isdigit, mais perméttant de vérifier une chaine complète.

    Grace à l'aide de plusieurs d'entre vous, voici le résultat : (obtenu il y a quelques semaines)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    int all_digits(char *s)
    {
     /* verification qu'on ne va pas deferencer un pointeur nul  */
        if (s != NULL)
        {
            /*tant que le caractere a la position *s n'est pas '\0'
             *(fin de chaine) et que isdigit() renvoit
             * une valeur non-nulle, on passe au caractere suivant. */
            while(*s && isdigit(*s))
            {
                /* Incrementation du s */
                s++;
            }
     
            /* Le '\0' terminal ou le '\n' a ete atteint,
             * donc isdigit() n'a jamais renvoye 0
             * -> la chaine n'est composee que de caracteres numeriques.
             *
             * isdigit() a renvoye 0.
             * On n'a pas atteint le '\0' terminal, ni le '\n'.
             * -> la chaine contient au moins un caractere non-numerique.*/
            return *s == '\0' || *s =='\n' ;
        }
        return 0;
    }
    Jusqu'ici tout va pour le mieux... Mais voila, il s'avère que cette fonction me retourne un 1 quand tout va bien... Et je préfererai qu'elle me renvoi un 0 tout beau tout rond... ça me perméttrait de mieu m'y retrouver dans mon code général...

    J'espère que vous pourrez m'aider au plus vite...

    Cordialement et avec tous mes remerciements.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si il s'agit d'inverser le code de retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            * -> la chaine contient au moins un caractere non-numerique.*/
            return *s != '\0' && *s !='\n' ;
        }
        return 1;
    }

  3. #3
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut


    Bon ben voila... Encore un topic qui sert à rien... XD ... Merci pour ta réponse, ça marche...

  4. #4
    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
    On peut aussi faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    int all_digits(char *s)
    {
        int ret = 0;
     
        if (s != NULL)
        {
            char *pend = NULL;
            strtol(s, &pend, 10);
            if (*pend == 0)
            {
                ret = 1;
            }
        }
     
        return ret;
    }
    Thierry

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant][java2D]améliorer le design
    Par pingoui dans le forum 2D
    Réponses: 13
    Dernier message: 29/11/2004, 10h06
  2. [ Eclipse 3 vs 2.1.2] Quelles sont les améliorations ?
    Par geegee dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/05/2004, 16h55

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