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 :

tester le type d'une chaine


Sujet :

C

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut tester le type d'une chaine
    J'aimerais tester le type d'une chaine .

    "12" -> nombre
    "rrrr" -> chaine

    Comment faire?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Moi, j'essaierais avec strtol() et je regarderais si la lecture s'est arrêté au début ou à la fin de la chaîne...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 81
    Points
    81
    Par défaut
    Tu peux toujours regarder le code ascii en parcourant ta chaine ...
    Tu te fais une fonction style is_num qui te renvoi 0 ou 1 si la chaine ne possède que des nombres par exemple.

  4. #4
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Médinoc
    Moi, j'essaierais avec strtol() et je regarderais si la lecture s'est arrêté au début ou à la fin de la chaîne...
    Cela dépend s'il considère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char *s = "1234Hello";
    Comme le début d'un nombre ou non... Quoique si, endptr serait égale à NULL, alors on saurait que toute la chaîne a été lue...

    Jc

  5. #5
    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 : 67
    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 fearyourself
    Quoique si, endptr serait égale à NULL, alors on saurait que toute la chaîne a été lue...
    Tu veux dire si *endptr == 0 ?

    Ca marche si la chaine a été 'nettoyée' (pas de '\n', par exemple)
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    ma chaine de caractère est définie de la manière suivante

    char *chaine

    est ce un problème?

  7. #7
    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 : 67
    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 molesqualeux
    ma chaine de caractère est définie de la manière suivante

    char *chaine

    est ce un problème?
    Ca, c'est un pointeur, pas une chaine. Mais on peut espérer qu'il contienne l'adresse d'une chaine valide... si tu as fait ce qu'il fallait...

    Si tout est correct, non, ce n'est pas un problème.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    Comment exploiter ce pointeur sur chaine?

    chaine[1] marchera pas?
    merci

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    je pense que le compilateur ne fait pas la diff entre les chiffres et les lettres lorsque lui mets qqc entre " " il la considere comme une chaine de caracteres, ainsi "45455" est une chaine de caracteres composées des symboles 4 et 5 et 4 et 5 et 5
    voilà

  10. #10
    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 : 67
    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 molesqualeux
    Comment exploiter ce pointeur sur chaine?

    chaine[1] marchera pas?
    Ben si, car en C, *(chaine +1) est équivallent à chaine[1].
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par molesqualeux
    Comment exploiter ce pointeur sur chaine?

    chaine[1] marchera pas?
    Ben si, car en C, *(chaine +1) est équivallent à chaine[1].
    Que signifie *(tab+3) ?

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    et maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *chaine;
    float nombre;
    chaine = "5";
    je voudrais nombre = 5 comment faire?
    merci

  13. #13
    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 : 67
    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 molesqualeux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *chaine;
    float nombre;
    chaine = "5";
    je voudrais nombre = 5 comment faire?
    Ouvre un livre de C. Il y a des fonctions de conversion standard. On ne va pas répondre à des questions aussi basiques...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Comment convertir un chaîne de caractère en nombre ?

    La c'est pratique quand même !!!

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  15. #15
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 84
    Points
    84
    Par défaut
    "atoi " chercher

  16. #16
    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 : 67
    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 emardjean
    "atoi " chercher
    Obsolète. Et pour du 'float', ça va pas le faire...
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    en fait je l'ai lu la page avant ,


    mon problème c'est que buf est un tableau de chaine de caractères alors que moi j'ai
    un pointeur sur chaine de caractères


    Si une chaîne de caractères contient un nombre, il est possible de placer ce nombre dans une variable grâce à la fonction sscanf() (ANSI-C). Sa syntaxe est très similaire à celle de sprintf().
    Notamment, les %d, %s… ont la même signification que pour sprintf().
    Pour récupérer un nombre n d'une chaîne de caractères on procédera ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
     
    char buf[32] = "15";
    int f;
     
    sscanf(buf, "%f", &n);

    mais mon problème est plus complexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char *chaine;
     
    chaine = evaluation(p->exp1,4);	
    printf("\n == %s\n",chaine); --> renvoie un truk correct
    sscanf(chaine, "%f", &valeur_num);
    printf("\n=== %f",valeur_num); -->renvoie un truc faux
    or le resultat est correct mais on dirait que c'est un problème de type.
    pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * evaluation(expression exp,int type)
    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *chaine;
    chaine = "10"
    printf("\n == %s\n",chaine); --> renvoie un truk correct
    sscanf(chaine, "%f", &valeur_num);
    printf("\n=== %f",valeur_num); -->renvoie un truc correct

  18. #18
    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 : 67
    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 molesqualeux
    mon problème c'est que buf est un tableau de chaine de caractères alors que moi j'ai
    un pointeur sur chaine de caractères
    Du moment que tu passes une adresse, peu importe...
    Pas de Wi-Fi à la maison : CPL

  19. #19
    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 : 67
    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 molesqualeux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char *chaine;
     
    chaine = evaluation(p->exp1,4);	
    printf("\n == %s\n",chaine); --> renvoie un truk correct
    sscanf(chaine, "%f", &valeur_num);
    printf("\n=== %f",valeur_num); -->renvoie un truc faux
    Quel est le type de valeur_num ? Poste du code complet, sinon, on ne peut pas donner de réponse précise.
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    valeur_num est un float.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tester la longueur d'une chaine de caractères
    Par greg64 dans le forum IHM
    Réponses: 9
    Dernier message: 12/06/2006, 15h54
  2. Tester le type d'une variable
    Par mzt.insat dans le forum Linux
    Réponses: 5
    Dernier message: 30/05/2006, 18h37
  3. concaténer un type char à une chaine
    Par Fabs dans le forum C
    Réponses: 8
    Dernier message: 11/11/2005, 15h21
  4. tester le type d'une valeur saisie
    Par lalaurie40 dans le forum C
    Réponses: 1
    Dernier message: 09/10/2005, 21h52
  5. [PL/SQL 9i] Tester le type d'une donnée
    Par tomca dans le forum Oracle
    Réponses: 10
    Dernier message: 29/09/2005, 09h17

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