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