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 :

detection de double ou integer dans un string


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut detection de double ou integer dans un string
    Bonjour tous,

    j'ai besoin d'un coup de main car je ne sais pas comment faire pour detecter des "integer" ou des "double" dans un string.

    Je m'explique, j'ai plusieurs string qui ressemble à ceci:

    "Ae7.8AA877E8.99"

    et je voudrais extraire les groupe de lettre à partir de cela et les nombre,au final je voudrais avoir ces string:

    "Ae" "7.8" "AA" "877" "E" "8.99"

    mais je n'y suis pas arrivé, pourriez vous m'aidez?

    => le nombre de lettre est soit 1 soit 2 soit 3 et le chiffre et necessairement compris entre 0 et 100

    merci d'avance pour votre aide

    EDIT:
    en fait il faudrait que je detecte ds mon string si le charactere "i" est une lettre ou une nombre ou vigurle.
    => si c'est un nombre ou une virgule alors je fais rien
    => si c'est une lettre alors je la garde de coté

    => si le prochaine string est aussi une lettre je le concatene...

    EDIT 2:
    dans un vecteur j'ai deja tous les nom des élements chimiques qui m'interesse, donc je peux peut etre comparer ces string avec des parti de mon string pour en deduire les noms qu'il y a dans ce string composé de noms d'elements + de nombres?

    ==> en fait il faudrait que je fasse un peu comme un find charactere mais que ca ne soit pas charactere mais un groupe de charactere qui se suivent

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    tout est dit :
    en fait il faudrait que je detecte ds mon string si le charactere "i" est une lettre ou une nombre ou vigurle.
    => si c'est un nombre ou une virgule alors je fais rien
    => si c'est une lettre alors je la garde de coté

    => si le prochaine string est aussi une lettre je le concatene...
    tu n'as plus qu'a utiliser cette fonction

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci bertry,

    en fait je pensais qu'il y avait quelque chose de plus automatique vu que j'ai deja quelque part le noms de tous les elements possible qui est stocké...

    => sinon à part ceci, comme puis je faire le test:

    - si c'est un nombre ou un point alors je fais rien
    - si c'est une lettre alors je garde ?

  4. #4
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    EDIT 2:
    dans un vecteur j'ai deja tous les nom des élements chimiques qui m'interesse, donc je peux peut etre comparer ces string avec des parti de mon string pour en deduire les noms qu'il y a dans ce string composé de noms d'elements + de nombres?
    Oui tu peux utiliser ça pour te simplifier le boulot si tu as la liste des éléments déjà toute prête.
    Utilises alors la fonction "find" dont la doc est ici pour localiser ces éléments dans ta string

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Ben voilà :
    ==> en fait il faudrait que je fasse un peu comme un find charactere mais que ca ne soit pas charactere mais un groupe de charactere qui se suivent
    Tu as l'air de bien te débrouiller tout seul finalement!!!

    La fonction find de la classe string fait ça très bien et elle te dis même si la sous chaine n'est pas dans la chaines principale...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par bertry Voir le message
    Oui tu peux utiliser ça pour te simplifier le boulot si tu as la liste des éléments déjà toute prête.
    Utilises alors la fonction "find" dont la doc est ici pour localiser ces éléments dans ta string
    merci je vais faire ceci je pense.

    => sinon juste pour ma culture, comment fait on pour savoir si monString[i] est un nombre ou une lettre ?

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    sinon juste pour ma culture, comment fait on pour savoir si monString[i] est un nombre ou une lettre ?
    l'opérateur [] te renvoie un char : Je pense qu'en le castant en int et en regardant si cette valeur est entre 48 et 57 c'est un chiffre et entre 65 et 122 c'est une lettre ( à tester de te donnes ça comme ça me viens... )

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci de ton aide, je pense que j'ai tous les éléments à présent

  9. #9
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    l'opérateur [] te renvoie un char : Je pense qu'en le castant en int et en regardant si cette valeur est entre 48 et 57 c'est un chiffre et entre 65 et 122 c'est une lettre ( à tester de te donnes ça comme ça me viens... )
    Même pas besoins de caster en int!!! Suis-je bête!
    tu as juste à écrire :
    ( c >= 'A' && c <= 'Z' ) || ( c >= 'a' && c <= 'z' ) pour les lettres ( attention ya d'autres caractères entres le 'Z' et le 'a' )
    et ( c >= '0' && c <= '9' ) pour les chiffres

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par bertry Voir le message
    Même pas besoins de caster en int!!! Suis-je bête!
    tu as juste à écrire :
    ( c >= 'A' && c <= 'Z' ) || ( c >= 'a' && c <= 'z' ) pour les lettres ( attention ya d'autres caractères entres le 'Z' et le 'a' )
    et ( c >= '0' && c <= '9' ) pour les chiffres
    super merci!

    par contre est tu certain que ceci fonctionne pour des doubles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( c >= '0' &&  c <= '9' )

  11. #11
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Non, il va falloir utiliser un "parser" de ton cru ou tout fait pour transformer une chaine en double. Quand tu aura localisé tous lé éléments chimiques, ce qui restera entre eux c'est les double sous forme de string. Mais, je sais plus comment on fait en natif, je regarde...

    Alors il semble que la fonction atof soit là pour ça...

    Il y a aussi de possibilités avec boost:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    double value;
    try
    {
        value = boost::lexical_cast<double>(my_string);
    }
    catch (const std::exception&)
    {
        value = 0;
    }
    et surement bien d'autres...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup

  13. #13
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    J'ai complété ma réponse ( voir ci-dessus )

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    il y a deux fonctions qui pourraient t'être utiles :

    std::isdigit
    http://www.cplusplus.com/reference/std/locale/isdigit/

    et

    std::isalpha
    http://www.cplusplus.com/reference/std/locale/isalpha/

  15. #15
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Il y a aussi une rubrique du forum qui utilise les flux et qui doit s'adapter au double

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci c'est tres gentil d'avoir pris le temps de m'aider, je vais regarder tous cela

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

Discussions similaires

  1. Double JFrame et enregistrer des String dans un fichier .txt
    Par Onelove dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 29/08/2014, 11h46
  2. Format d'un double stocké dans une String
    Par ep31 dans le forum Struts 1
    Réponses: 5
    Dernier message: 20/09/2007, 12h27
  3. Affichage de String au lieu d'Integer Dans un DBCombo!
    Par soror dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/07/2007, 12h37
  4. Recherche d'un String dans un String ?
    Par apen2k2 dans le forum Langage
    Réponses: 9
    Dernier message: 14/04/2003, 11h08
  5. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/10/2002, 22h33

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