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 :

[Debutant] recuperer un chiffre dans un string


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19
    Par défaut [Debutant] recuperer un chiffre dans un string
    bonjour,

    je debute en C et je cherche à recuperer un numero contenu dans une chaine de caractere, exemple :

    nom5.domaine.com, je soutaite obtenir : 5
    bob12.domaine.com, je soutaite obtenir : 12

    j'ai un debut de fonction mais je seche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char *get_numsrv(char *str) {
        char *new_s = NULL;
     
        char *pospoint;
        pospoint = strchr(str, '.');
        if (pospoint != NULL) {
            /*  retourner la valeur de l'entier present avant le '.' */
        } else return 0;
    }
     
    /* exemple d'utilisation*/
     sprintf(fichier,"%s/serveur-%d.txt",LOG,get_numsrv(serveur));
    merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 36
    Par défaut
    tu peux parcourir chaque caractère de ta chaine et déterminer si c'est un nombre avec isdigit() .
    Après si les deux indices de deux nombres se suivent tu crée la chaine correspondante et ainsi de suite

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Tes chaînes ne sont censées avoir d'un seul entier ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19
    Par défaut
    oui, ma chaine ne contiendra qu'un seul entier
    elle commencera toujours par 3 lettres
    xxx{numero}.xxxxx.xxx

    je voit bien comment faire sur le principe, mais en C je seche completement


    EDIT: je prefere en C car ce sera dans un .cgi qui sera appele quelque millions de foit par jour

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Ton élément sera un char * c

    Ton chiffre commencera à partir de c[3]

    Tu déclares par exemple un char temporaire[16];

    Pis tu lis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i = 0;
    while(c[i+3]!='.')
    {
     temporaire[i] = c[i+3]; 
     i++;
    }
    temporaire[i] = '\0';

    Enuiste tu n'as que l'entier, suffit de convertir la variable temporaire (char*) en entier (me rappelle plus de l'instruction, mais qqn va surement ne pas tarder à nous la rappeler).


    Edit : Ah oui, c'est atoi

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Si tu es certain que le nom commence par trois caracteres, alors tu fait simplement:
    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
     
    int get_numsrc(char *str)
    {
       int numsrc = -1;
       if (str)
       {
         char *p;
         numsrc = strtol(str + 3, &p, 10);
         if (*p != '.')
         {
            fprintf(stderr, "No dot after number in %s.\n", str);
         }
      }
      return numsrc;
    }
    Ici, je verifie que le caractere apres le chiffre est bien un point. Il faudrait quand meme s'assurer qu'il n'y a que trois caracteres avant le chiffre...

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par millie
    Edit : Ah oui, c'est atoi
    NON!

    Il faut utiliser strtol

    Jc

  8. #8
    Membre confirmé

    Inscrit en
    Janvier 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 188
    Par défaut
    mets des balises codes !!! y a pas grand chose mais c'est relou à lire...
    juste un truc.
    Pourquoi tu fais ça en C ?
    en script shell / script batch ou script perl ce serait carrément plus court... vive les regexpr :p
    PS : j'espère j'dis pas de conneries mais y en a pas en C non ?

  9. #9
    Expert éminent
    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
    Par défaut
    Citation Envoyé par mnaulet
    tu peux parcourir chaque caractère de ta chaine et déterminer si c'est un nombre avec isdigit() .
    Après si les deux indices de deux nombres se suivent tu crée la chaine correspondante et ainsi de suite
    au secours !

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Met en résolu si ça marche

  11. #11
    Expert éminent
    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
    Par défaut
    Citation Envoyé par alain.lc
    je debute en C et je cherche à recuperer un numero contenu dans une chaine de caractere, exemple :

    nom5.domaine.com, je soutaite obtenir : 5
    bob12.domaine.com, je soutaite obtenir : 12

    oui, ma chaine ne contiendra qu'un seul entier
    elle commencera toujours par 3 lettres
    xxx{numero}.xxxxx.xxx
    strtol(), strtoul()...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
    char const *sa = "nom5.domaine.com";
    char const *sb = "bob12.domaine.com";
     
       printf ("na = %ld\n", strtol(sa + 3, NULL, 10));
       printf ("nb = %ld\n", strtol(sb + 3, NULL, 10));
       return 0;
    }
    Evidemment, on peut faire plus compliqué...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    na = 5
    nb = 12
    Press ENTER to continue.

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

Discussions similaires

  1. recuperer n caractere dans un string
    Par tongo dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/10/2008, 18h04
  2. [Debutant]compter un char dans un string
    Par Lafab dans le forum Langage
    Réponses: 3
    Dernier message: 09/04/2008, 14h33
  3. [Debutant] Manipuler les int dans un string
    Par mr_samurai dans le forum Débuter
    Réponses: 5
    Dernier message: 18/01/2008, 20h00
  4. Comment récupérer un chiffre dans une chaîne ?
    Par kenny49 dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2006, 14h52
  5. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49

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