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 d'un int sous un format string?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    Par défaut detection d'un int sous un format string?
    Bonjour tous,

    j'ai besoin d'aide pour quelque chose surement assez facile pour vous mais que je ne vois pas trop comment faire.

    1°) mon problème:


    j'ai une fonction qui lit un fichier texte et met un "string" dans la variable "AAA" qui est biensur de type string.
    le texte est du type: A3B8, ou AA99RR1, ou A9R1E6R7

    dans ce texte il y a 1 ou 2 lettre puis 1 ou 2 chiffre puis 1 ou 2 lettre puis 1 ou 2 chiffres.... etc

    2°) ce que je voudrais faire:


    par exemple pour AA8B99:

    je voudrais faire un petit code qui permet de mettre AA et B dans les lignes d'un vector et 8 et 99 dans des lignes d'un autre vector


    3°) tentative:


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    void bibi
    {
    //---------
    string AAA= "AA8B99";
    int i, taille = AAA.size ();
    vector <string> lettre;
    vector <string> chiffre;
    //---------
     
    //---------
    cout << "La chaine comporte " << taille << " caracteres." << endl;
     
    for (i = 0 ; i < taille ; i++)
    {
    cout << "caractère " << i << " = " << AAA.at(i) << endl;
     
    if (AAA.at(i)==texte)
    {
           if (AAA.at(i+1)==texte)
           {
                   lettre.push_back(AAA.at(i)+AAA.at(i+1))
           }
           else (AAA.at(i+1)==nombre)
           {
                   lettre.push_back(AAA.at(i))
           }
    }
    else (AAA.at(i)==nombre)
    {
           if (AAA.at(i+1)==nombre)
           {
                   chiffre.push_back(AAA.at(i)+AAA.at(i+1))
           }
           else (AAA.at(i+1)==texte)
           {
                   chiffre.push_back(AAA.at(i))
           }
    }
    }
    }

    4°) problème persistant:


    mon problème comme vous avez du le remarquer dans le code est les conditions que je place dans les if et else:

    J'aimerai que si AAA.at(i) est un nombre alors on fait quelque chose et si AAA.at(i) est une lettre alors on fait autre chose.


    ==> Le problème est comment détecter si l'on a un nombre ou une lettre car les nombres que j'ai dans AAA sont de type string


    en esperant que vous pourrez m'aider

    ----------------------------------------
    ps: J'ai pensé à faire une convertion de string vers double avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    istringstream iss1( AAA.at(i) );               
    iss1 >> aaa;
    mais je ne sais toujours pas comment m'en sortir meme avec cela...

  2. #2
    Membre éprouvé
    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
    Par défaut
    j'ai peut etre trouvé :

    il faudrait dans les conditions que je fasse une convertion de chaque caractère et que je compare à un des chiffre allant de 0 à 9.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    istringstream iss1( AAA.at(i) );               
    iss1 >> aaa;
    if (aaa==0 || aaa=1 || aaa=.... || aaa=9)
    {
     
    }
    else //si caractere différent de ceux ci dessus alors ca veut dire que ca sera //une lettre.
    {
     
    }

  3. #3
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Bonjour!

    Pourquoi ne pas se baser tout simplement sur la valeur ascii de chaque caractère?

    Tu regardes le code, s'il est dans la plage des entier.. c'est un entier, sinon, c'est un caractère..

    Tu peux aussi jeter un coup d'oeuil sur les regex.. (ce qui me fait me poser la question: on peut vérifier qu'une chaine correspond bien à un pattern, mais peut on découper une chaine selonun pattern de type regex?)

  4. #4
    Membre éprouvé
    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
    Par défaut
    Citation Envoyé par seeme Voir le message
    Bonjour!
    Pourquoi ne pas se baser tout simplement sur la valeur ascii de chaque caractère?
    Tu regardes le code, s'il est dans la plage des entier.. c'est un entier, sinon, c'est un caractère..
    Tu peux aussi jeter un coup d'oeuil sur les regex.. (ce qui me fait me poser la question: on peut vérifier qu'une chaine correspond bien à un pattern, mais peut on découper une chaine selonun pattern de type regex?)
    bonjour,
    à oui pourquoi pas , je n'ai pas pensé à cela car je ne maitrise pas trop les convertions ascii.

    D'ailleurs je vais faire comme je viens de trouver car j'ai peur de faire une erreur.

    si ca ne fonctionne pas je vous tient informé.

    (merci d'avoir pris le temps de repondre)

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut !

    C'est facile, tu trouveras sur cette page les méthodes utiles à la résolution de ton problème.

    Utilise "isalpha" pour voir si c'est une lettre.
    Utilise "isdigit" pour voir si c'est un chiffre.

    Je déconseille les solutions de types ASCII, ce sera cassé s'il y a des variations liées à la locale.

  6. #6
    Membre éprouvé
    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
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Salut !
    C'est facile, tu trouveras sur cette page les méthodes utiles à la résolution de ton problème.
    Utilise "isalpha" pour voir si c'est une lettre.
    Utilise "isdigit" pour voir si c'est un chiffre.
    Je déconseille les solutions de types ASCII, ce sera cassé s'il y a des variations liées à la locale.
    ok, je vais regarder (si il y a plus facile je suis preneur )

    A+

  7. #7
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Nan bah là, plus facile que isalpha ou isdigit...

  8. #8
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    voila bien longtemps que je n'ai pas fait de C++ aussi je vais ptre dire une bêtise, mais pour autant que je m'en souvienne std::string.at(i) retourne un char.
    Et un char c'est un nombre dont tu peux en faire une correspondance avec la table ASCII :
    - les nombres : > 47 et < 58
    - les minuscules : > 96 et < 123
    - les majuscules : > 64 et < 91

    donc je dirais bien un truc du genre :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    inline bool isNumeric(char c)
    {
        return ( c > 47 && c < 58); // On pourrais aussi écrire c >= '0' && c <= '9'
    }
     
    inline bool isCapital(char c)
    {
        return ( c > 64 && c < 91 ); // On pourrais aussi écrire c >= 'A' && c <= 'Z'
    }
     
    // ...
     
    if ( isCapital(AAA.at(i)) ) // Majuscule
    {
           if ( isCapital(AAA.at(i + 1)) )
           {
                   lettre.push_back( AAA.at(i) + AAA.at(++i)); // ++i car il faut consommer également i + 1
           }
           else ( isNumeric(AAA.at(i + 1)) )
           {
                   lettre.push_back(AAA.at(i));
           }
    }
    else ( isNumeric(AAA.at(i)) )
    {
           if ( isNumeric(AAA.at(i + 1)) )
           {
                   chiffre.push_back( AAA.at(i) + AAA.at(++i)); // ++i car il faut consommer également i + 1
           }
           else ( isCapital(AAA.at(i + 1)) )
           {
                   chiffre.push_back( AAA.at(i) );
           }
    }

  9. #9
    Membre éprouvé
    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
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Salut,
    voila bien longtemps que je n'ai pas fait de C++ aussi je vais ptre dire une bêtise, mais pour autant que je m'en souvienne std::string.at(i) retourne un char.
    Et un char c'est un nombre dont tu peux en faire une correspondance avec la table ASCII :
    - les nombres : > 47 et < 58
    - les minuscules : > 96 et < 123
    - les majuscules : > 64 et < 91

    donc je dirais bien un truc du genre :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    inline bool isNumeric(char c)
    {
        return ( c > 47 && c < 58); // On pourrais aussi écrire c >= '0' && c <= '9'
    }
     
    inline bool isCapital(char c)
    {
        return ( c > 64 && c < 91 ); // On pourrais aussi écrire c >= 'A' && c <= 'Z'
    }
     
    // ...
     
    if ( isCapital(AAA.at(i)) ) // Majuscule
    {
           if ( isCapital(AAA.at(i + 1)) )
           {
                   lettre.push_back( AAA.at(i) + AAA.at(++i)); // ++i car il faut consommer également i + 1
           }
           else ( isNumeric(AAA.at(i + 1)) )
           {
                   lettre.push_back(AAA.at(i));
           }
    }
    else ( isNumeric(AAA.at(i)) )
    {
           if ( isNumeric(AAA.at(i + 1)) )
           {
                   chiffre.push_back( AAA.at(i) + AAA.at(++i)); // ++i car il faut consommer également i + 1
           }
           else ( isCapital(AAA.at(i + 1)) )
           {
                   chiffre.push_back( AAA.at(i) );
           }
    }

    merci pour cette reponse, ca me plait bien en fait votre idée, je crois que je vais faire cela.

    je vous tient informé si j'ai un problème mais je pense à présent que c'est tout bon!

    merci

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

Discussions similaires

  1. Soucis Format String/Int pour requête LIKE
    Par bonuxis dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2009, 15h20
  2. Réponses: 7
    Dernier message: 26/06/2007, 10h36
  3. [MySQL] regrouper les données sous un format différent
    Par Erakis dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/01/2006, 15h11
  4. Exporter sous un format jpeg
    Par Kuollu dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/05/2005, 10h29
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

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