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 :

Extraire des entiers d'une chaine de caractères


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 90
    Points : 39
    Points
    39
    Par défaut Extraire des entiers d'une chaine de caractères
    J'ai une chaine de caractère qui contient des caractères ET des entiers.

    Je voudrais à un moment dans mon programme utiliser les entiers qui se trouvent enregistrés das cette chaine.

    Comment faire pour pouvoir les mettre dans une variable de type int ???

    En ce moment, je n'arrive pas à les extraires.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    je viens de voir un poste sur le sujet qui utilise la fonction atoi().

    mais commentextraire des entiers qui sont placés dentre des caractères dans la chaine de façon aléatoire ?

    par exemple : extraire un entier de 4 chiffres consecutif dans une chaine.

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    tu parcours ta chaine et tu regarde si le caractère est un chiffre (isdigit) et si c'est le cas tu fais un appel à atoi en lui passant un pointeur sur ce caractère puis tu continue le parcours a partir du 1er caractère suivant qui ne soit pas un chiffre

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    ok merci.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 92
    Points : 84
    Points
    84
    Par défaut
    Je te conseille d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long int strtol (const char *nptr, char **endptr, int base);
    Cette fonction converti ta chaine en un entier en omettant les espaces du début. Elle arrête la convertion en fin de chaine ou quand elle rencontre un caractère qui n'est pas un chiffre. Du coup tu parcours ta chaine pour trouver le premier caractère qui est un chiffre. Puis tu passes en paramètre à strtol l'adresse de ce caractère et le tour est joué.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    en fait je n'y arrive pas !

    voilà ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (i<nbcar)
    {
    num+=atoi(lu[i++])*pow(10,9);
    }
    il genere une erreur sur la fonction atoi() !
    dans ce cas je suis certins que l'indice i représente un chiffre entier.
    je ve multiplier ce chiffre par une puissance de 10,exposant 9.
    num est une variable de type long int

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 92
    Points : 84
    Points
    84
    Par défaut
    Je n'est pas testé, ni compilé la fonction. Mais elle devrait ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int str_to_int ( char *ma_chaine) {
    	int i = 0;
    	int mon_entier = 0;
     
    	if ( ma_chaine != NULL ) {
    		for ( i = 0; (isdigit ( ma_chaine[i]) == 0) && (ma_chaine != '\0'); i++);
     
    		if ( ma_chaine[i] != '\0' ) mon_entier = strtol ( &ma_chaine[i], NULL, 10);
    	}
     
    	return mon_entier;
    }

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 90
    Points : 39
    Points
    39
    Par défaut
    merci beaucoup.

    j'ai adapté à mon appli et ça marche.

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par nerick
    en fait je n'y arrive pas !

    voilà ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (i<nbcar)
    {
    num+=atoi(lu[i++])*pow(10,9);
    }
    il genere une erreur sur la fonction atoi() !
    dans ce cas je suis certins que l'indice i représente un chiffre entier.
    je ve multiplier ce chiffre par une puissance de 10,exposant 9.
    num est une variable de type long int
    attention atoi attend une adresse et non une valeur. De plus il ne vas pas convertir et renvoyer uniquement un chiffre mais un nombre representant tout ce qu'il a pu convertir.

    zero : atoi fonctionne a peu pres comme strtol (enfin atol fonctionne comme strtol) elle supprime les espace au debut, gere le igne et s'arrete sur une fin de chaine ou un caractere non convertible. Les differences majeures sont gestion des base (tu peux specifier la base que tu utilise, ou laisser strtol la detecter tout seule) et il retourne un pointeur sur la partie de la chaine correspondant a l'endroit ou il a arreter la conversion, ce qui peut etre tres partique pour continuer la recherche d'autres entiers dans la chaines.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 92
    Points : 84
    Points
    84
    Par défaut
    Merci pour les précisions, je ne les connaissais pas toutes.

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

Discussions similaires

  1. Extraire des nombres dans une chaine de caractère
    Par fxfxfx dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 27/05/2013, 10h41
  2. Extraire des champs dans une chaine de caractère
    Par clemuche dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2009, 23h24
  3. [Tableaux] Extraire des mots d'une chaine de caractères
    Par pratiquement dans le forum Langage
    Réponses: 5
    Dernier message: 24/01/2008, 09h20
  4. extraire des entiers d'une chaine de caractère
    Par 18Marie dans le forum Langage
    Réponses: 9
    Dernier message: 10/08/2006, 11h17
  5. [MySQL] extraire des nombre d'une chaine de caractères et addition
    Par Yotho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/03/2006, 16h54

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