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 :

Conversion chaîne de caractère/valeur numérique


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 54
    Points
    54
    Par défaut Conversion chaîne de caractère/valeur numérique
    Bonjour,

    je souhaiterais convertir une chaîne de caractère en valeur numérique.

    Voici le genre de chaînes : char chaine[3] = "1/3".

    Et je voudrais la valeur numérique associée. J'ai essayé quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    atof(chaine[2])/atof(chaine[0])
    mais atof() ne fonctionne pas sur des caractères d'une chaîne. Est-ce qu'un de vous aurait une idée pour me débloquer sans passer par le code ASCI des caractères ?

    Merci d'avance !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une remarque en passant, dans ton code :
    Citation Envoyé par julieng31 Voir le message
    Voici le genre de chaînes : char chaine[3] = "1/3".
    chaine est un tableau de 3 caractères et "1/3" est une chaine de 4 caractères (il y a le \0 final à prendre en compte). Donc cela ne peut pas rentrer.

    Pour éviter ce genre de désagréments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char chaine[] = "1/3";
    ou encore
    char *chaine = "1/3";
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par julieng31 Voir le message
    Et je voudrais la valeur numérique associée.
    On peut utiliser sscanf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char chaine[] = "123/456";
    int num, den;
     
    if(2 == sscanf(chaine, "%d/%d", &num, &den)) {
        /* conversion réussie */
        printf("numerateur : %d\n", num);
        printf("denominateur: %d\n", den);
    } else {
        /* echec de sscanf */
        perror("sscanf");
    }

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 54
    Points
    54
    Par défaut
    Ram-0000, je me base sur un programme déjà fait qui n'utilise pas le caractère "\0". Cependant, la présence de ce caractère ne m'aide pas à extraire la valeur numérique.

    Mabu, j'avais déjà pensé à cette solution mais je préfèrerai une fonction avec retour direct (pas par passage de pointeur) comme le fait par exemple atof(). Je ne sais pas si cela existe, c'est pour cela que j'ai écrit ce post.

    En tout cas, merci pour vos réponses.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par julieng31 Voir le message
    Ram-0000, je me base sur un programme déjà fait qui n'utilise pas le caractère "\0". Cependant, la présence de ce caractère ne m'aide pas à extraire la valeur numérique.

    Mabu, j'avais déjà pensé à cette solution mais je préfèrerai une fonction avec retour direct (pas par passage de pointeur) comme le fait par exemple atof(). Je ne sais pas si cela existe, c'est pour cela que j'ai écrit ce post.

    En tout cas, merci pour vos réponses.
    Citation Envoyé par julieng31 Voir le message
    Est-ce qu'un de vous aurait une idée pour me débloquer sans passer par le code ASCI des caractères ?
    Hum, on peut imaginer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double value = (double)(chaine[0] - '0') / (double)(chaine[2] - '0');
    On ne se sert pas des codes ASCII des caractères, mais presque...

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 54
    Points
    54
    Par défaut
    C'est en fait la version que j'utilise actuellement mais je souhaiterais avoir quelque chose de plus propre, plus lisible.

Discussions similaires

  1. Conversion de chaînes de caractères en numérique
    Par djelloharmel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/12/2011, 11h03
  2. Conversion chaîne de caractère en nombre décimal
    Par Aquatic dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/04/2011, 11h08
  3. Conversion chaine de caractères en numérique
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 18/07/2007, 11h25
  4. Réponses: 4
    Dernier message: 21/09/2005, 17h35

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