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

SL & STL C++ Discussion :

conversion de String en Num [FAQ]


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Inscrit en
    F�vrier 2004
    Messages
    21
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 21
    Par d�faut conversion de String en Num
    Bonjour,

    Pour faire cette conversion, je trouve dans la FAQ C++ :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <sstream>  
     
    int StrToNum(std::istringstream str)
    {
        int i;
     
        str >> i;
        return i;
    }
    Cependant, le passage du string au istringstream s'av�re probl�matique.

    Si je passe le string en param�tre de fonction, il me dis qu'il ne peut pas convertir le std::string en std::istringstream.
    Pas de probl�me !!

    Je lui fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    istringstream blabla(metaString, istringstream::in);
    et je passe blabla en param�tre de fonction.
    Et j'obtiens la merveilleuse phrase :
    error C2664: 'StrToNum' : cannot convert parameter 1 from 'std::istringstream' to 'std::istringstream'
    Pourquoi ??
    Comment faire ??
    Rhaaa ... (n'empeche c'est beau comme phrase)
    (Je suis sous VC.NET)

    PS : j'ai r�solu mon probl�me en ne passant pas par la fonction mais en donnant directement l'op�ration � faire mais j'aime pas ne pas comprendre, surtout quand il s'agit de mes erreurs � moi.

  2. #2
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    La FAQ contient ce truc ...????
    Normalement, les flux ne sont pas copiables. Ce qui peut expliquer ton probl�me.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    template <typename T> 
    T toT(const std::string & s) {
        std::istringstream iss(s);
        T res;
        if (!(iss >> res)) throw bad_cast("....");
        // penser à définir bad_cast. 
        return res;
    }
    Ou mieux, utiliser boost::lexical_cast<>.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  3. #3
    LFE
    LFE est d�connect�
    Membre Expert

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    95
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 95
    Par d�faut
    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
    #include <sstream>
     
    int StrToNum(std::istringstream str);
     
    int main(int argc, char* argv[])
    {
        int i;
     
        std::string c = "10";
        i = StrToNum(c);
        return 0;
    }
     
    int StrToNum(std::istringstream str)
    {
        int i;
     
        str >> i;
        return i;
    }
    Ceci fonctionne sans aucun probl�me sous BCB6 (j'essaie sur un autre compil ce soir).

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir ,
    Me voil� rappel� � mon vieux dada.
    Pour convertir cha�ne en num�rique , �i joint un exemple.


    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
      #include <iomanip>
      #include <iostream>
      #include <string>
      #include <limits>
      #include <sstream>
     
      using namespace std;
     
     
      /* la méthode qui suit :
         retourne 0 en cas de succés
         sinon la position où l' erreur au lieu ( p + 1 )
         ou -1 en cas de débordement de capacité
         Pas trés chouette mais plus précis peut-être...
      */
     
      template < typename T >
      int strToNum( const string& z , T& val, char point = '.' )
      { long double v(0.0) ;
        size_t i(0) ;
     
     
        /* DEBUT de la vérification formelle de la chaîne z
        saisie par un utilisateur  pour un type numérique T
        */
     
        while( isspace(z[i]) && i < z.length() ) i++ ;
        if( z[i] == '+'  ) i++ ;
        else
        if( z[i] == '-')
        { if( ! numeric_limits<T>::is_signed ) return i+1 ;
          i++ ;
        }
     
        while( i < z.length() && isdigit( z[i] ) )   i++ ;
     
        if( isspace(z[i]) )
        while ( z[i] )  if ( ! isspace(z[i++]) ) return i+1 ;
     
        if ( i == 0  ) return 1  ;
     
        if( i < z.length() && z[i] != point )  return i+1 ;
        else
        if( i < z.length()  && z[i] ==  point  &&  numeric_limits<T>::is_integer  ) return i+1 ;
     
        i++ ;
     
     
        while( i < z.length()  && isdigit( z[i] ) )   i++ ;
     
        if( i < z.length()  && ! isspace(z[i]) )  return i+1 ;
     
        if( isspace( z[i] )  )
        while( i < z.length() ) if ( ! isspace(z[i++])  ) return i+1  ;
     
        /* FIN de la vérification formelle de la chaîne z
        saisie par l' utilisateur pour un type numérique T
        */
     
        bool res = ( ( istringstream( z ) >>  v ) != 0 )  ;
        T  ma = numeric_limits<T>::max() ;
        T  mi = -numeric_limits<T>::min()  ;
        if( res == true && (v <= ma && v >= mi ) )
        { val = static_cast<T>( v ) ;
          return 0 ;
        }
        return -1  ;
      }
     
     
     
     template< typename T >
     int do1(void)
      { T v(1) ;
        while( v != 0 )
        { cout << "Entrez votre chaine (ou caractère ) à convertir ( ou 0 pour quitter) ?" << endl ;
          string buf  ;
          getline( cin, buf, '\n' ) ;
          int res = strToNum( buf , v  ) ;
     
          if( res == 0 )
          { cout << "Conversion ok " << buf << ' '
            << setiosflags( ios::showpoint | ios::fixed )
            << setw(12) << setprecision(6)
            << v << endl;
          }
          else
          if( res > 0 )
            cout << endl << "Conversion echec " << buf << ' ' << "A la position " << res << endl ;
          else
          if( res == -1 )
            cout << endl << "Conversion echec " << buf << ' ' << "Débordement de capacité= " << res << endl ;
        }
        cout << "Vous avez entré 0 ==> terniné.."  << endl ;
     
        return 0 ;
      }
     
     
      int main()
      { cout <<  "==================Unsigned char================= " << endl ;
        do1<  unsigned char >() ;
        cout <<  "==================Float        ================= " << endl;
        do1<float>();
        return 0 ;
      }
     
      /* end */
    Cordialement.

  5. #5
    Membre habitu�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 12
    Par d�faut
    J'en ai une qui est beaucoup mieux car elle reste avec des standart_string

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int StrToNum(string str)
    {
        int i;
     
    	stringstream ss(str);
     
        ss >> i;
     
        return i;
    }

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Bonsoir,

    Dozer, je te renvoie � mon post du fil qui est bien plus correct que la solution que tu proposes. Et encore, elle marche avec std::string au lieu de std::basic_string<>.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  7. #7
    Membre exp�riment�
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par d�faut
    int StrToNum(std::istringstream str)
    ...
    std::string c = "10";
    i = StrToNum(c);
    ...
    n'est pas cens� fonctionner. Le constructeur d'un istringstream � partir d'une cha�ne est explicit (27.7.2 du standard).
    Il faudrait corriger la FAQ.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir,

    Pour faire une conversion de "string" en valeur num�rique, il faut s' assurer de certaines conventions.
    string z ;

    Si la cha�ne z est �gale � "0101oa45", peut-on dire que l' on peut la convertir en un type num�rique ? Si oui � quel prix ?

    Si la cha�ne z est �gale � " 22121 122" , peut-on encore dire que l' on peut la convertir en type num�rique ? Et � quel prix ?

    etc..
    Pour vous donner une id�e, jeter un oeil sur la mani�re dont est accept� un type num�rique avec votre tableur sous Windows ou Linux.

    J'ai propos� une m�thode de conversion des "string" en num�rique, qui s' est efforc�e de tenir compte de la repr�sentation visuelle de ce que pouvait saisir un utilisateur. Afin de tenir compte , non pas de la "logique formelle" , mais du "bon sens" de la perception r�troactive de ce que chacun peut �mettre.

    Cordialement.

  9. #9
    Membre exp�riment�
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par d�faut
    Ce n'est pas � la locale de s'occuper de ce genre de d�tails ?
    Le "bon sens" peut �tre tr�s variable selon le pays dans lequel tu te trouves.

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonjour,

    Parler de "bon sens" en informatique, c'est certes passer pour un roturier...

    Mais soit une cha�ne " +2211ppp32", il y a manifestement une erreur de saisie si on veut la convertir en "int".

    Mais les broutilles propos�es y verront un "int", peut-�tre 2211, mais cela ne me para�t pas tr�s rigoureux.

    Je me r�p�te, lorgnez ce que vos tableurs acceptent de mani�re formelle pour faire la distinction entre un num�rique et une cha�ne de caract�res.

    Cordialement.

  11. #11
    Membre exp�riment�
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par d�faut
    La seule chose que l'on peut reprocher � la version de LH, est de ne pas v�rifier que tous les caract�res du istringstream ont bien �t� lus au non.

    Apr�s s'il faut supprimer quelques espaces dans la cha�ne en entr�e, pourquoi pas. Mais �a ne justifie en aucun qu'� une version de plus de 50 lignes ne prenant m�me pas en compte la notation des exposants pour les double.

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir,

    D�sol� mais il n' y a pas 50 lignes de code pour convertir une "string" en type num�rique.

    Maintenant si vous savez comment faire une omelette sans casser des oeufs, je vous �coute...

    Cordialement.

  13. #13
    Membre exp�riment�
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par d�faut
    Pour la fonction, il suffit de lire la premi�re r�ponse de LH,
    qui me convient assez bien ( � un test pr�s sur ce qu'il y a ensuite
    dans le iss - eof() ne semble pas suffisant ).
    Les difficiles rajouteront un trim en fin de cha�ne pour convertir avec succ�s "123 ", tout en �chouant sur "123aaa"

    Elle fait au moins 5 lignes, c'est tr�s largement suffisant.
    [/code]

  14. #14
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    (Je reprends ma r�ponse qui fut interrompue par un ^W r�flexe pour effacer le mot avant le curseur... )
    boost::lexical_cast<> fonctionne vraiment tr�s bien. Pourquoi r�inventer la roue ?

    Autrement, pour "ma" solution intiale, il suffit effectivement de rajouter un petit test. Et soyons fou, on peut m�me sortir des polices [1] (par contre, cela devient peu pratique � utiliser...)

    Je ne sors les std::stringstream uniquement quand j'ai besoin d'injecter/extraire plusieurs choses dans une chaine.

    [1]
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <boost/lexical_cast.hpp>
    #include <sstream>
    #include <stdexcept>
    #include <iostream>
     
    namespace rest {
        struct fail_explain {
            static void test (std::istream & is) {
                if (!is.eof()) {
                    std::string rem;
                    std::getline(is, rem);
                    throw std::runtime_error("Bad cast: remaining characters <<"
                            +rem+">>");
                }
            }
        };
     
        struct fail {
            static void test (std::istream & is) {
                if (!is.eof()) {
                    throw std::runtime_error("Bad cast: remaining characters");
                }
            }
        };
     
        struct accept {
            static void test (std::istream & is) {}
        };
    }
     
     
    template <typename T, typename rest_policy> 
    T toT(const std::string & s) { 
        std::istringstream iss(s); 
        T res; 
        if (!(iss >> res)) 
            throw std::runtime_error("Bad cast: <<"+s+">>"); 
        rest_policy::test(iss);
        return res; 
    }
     
    int main ()
    {
        std::string ch;
        while ((std::cout << "\nnb ?\n->" , std::getline(std::cin, ch))) {
            try {
                // std::cout << "nb = " << toT<int, rest::fail>(ch);
                // std::cout << "nb = " << toT<int, rest::fail_explain>(ch);
                // std::cout << "nb = " << toT<int, rest::accept>(ch);
                std::cout << boost::lexical_cast<int>(ch) ;
                std::cout << "\n";
            } catch (std::exception & e) {
                std::cerr << "Erreur: " << e.what() << std::endl;
            }
        }
     
        return 0;
    }
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir,

    Vous me fa�tes penser au Z�non de Citium (le sto�que) ou encre au Z�non d' El�e (le pr�-socratique), quant � savoir auqel des deux, je suis � l' �coute...

    Soyons s�rieux.

    Pour convertir une "string" en valeur num�rique, il faut faire une op�ration sans do�te fastidieuse. Cela ne va pas user , votre micro-processeur !

    Cordialement.

  16. #16
    Membre exp�riment�
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par d�faut
    Juste par curiosit�, as-tu comme moi pris la peine de tester ta fonction (qui sans les commentaires fait donc 42 lignes) ?
    Voici ce que j'obtiens avec mon jeu de test :

    ==================Float =================
    Conversion ok 3.6546 3.654600

    Conversion echec .3132 A la position 1
    Conversion ok 321 321.000000
    Conversion ok 321321 321321.000000

    Conversion echec 321 321.23654 A la position 9

    Conversion echec 12e5 A la position 3
    Conversion ok 3.6546 3.654600

    Conversion echec .3132 A la position 1

    Conversion echec 132aaa A la position 4
    Conversion ok 321321 321321.000000
    Conversion ok 321321.23654 321321.250000

    Conversion echec 321 321 A la position 9

    Conversion echec 12e5 A la position 3
    Conversion ok 3.6546 3.654600

    Conversion echec .3132 A la position 1

    Conversion echec 132aaa A la position 4

    Conversion echec azea A la position 1
    Conversion ok 0. 0.000000

    Conversion echec .0 A la position 1

    Conversion echec . A la position 1

    Conversion echec A la position 1

    Conversion echec D�bordement de capacit�= -1
    J'esp�re ne jamais avoir � utiliser une telle fonction en production.
    Voici une version plus l�g�re bas�e sur une utilisation courante d'une telle conversion.
    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
     
    // Une version simplifiée, limitée à une 'policy'  :wink: 
    template< typename T >
    T StrToNum( const string& s ) {
        string tmp;
        // Un simple TRIM
        string::size_type idx = s.find_last_not_of( ' ' );
        if ( idx != string::npos )
            tmp = s.substr( 0, idx + 1 );
     
        istringstream iss( tmp );
        T v;
        if ( !(iss >> v ) || !iss.eof() ) throw runtime_error( "bad_cast" );
        return v;
    }
    Voici je que j'obtiens avec ma fonction et le m�me jeu de test
    t = [3.6546] ---> v : 3.654600
    t = [.3132] ---> v : 0.313200
    t = [321] ---> v : 321.000000
    t = [321321] ---> v : 321321.000000
    t = [321 321.23654] ---> 4:bad_cast
    t = [12e5] ---> v : 1200000.000000
    t = [ 3.6546] ---> v : 3.654600
    t = [.3132 ] ---> v : 0.313200
    t = [132aaa] ---> 8:bad_cast
    t = [321321 ] ---> v : 321321.000000
    t = [321321.23654 ] ---> v : 321321.236540
    t = [321 321 ] ---> 11:bad_cast
    t = [12e5 ] ---> v : 1200000.000000
    t = [ 3.6546 ] ---> v : 3.654600
    t = [.3132 ] ---> v : 0.313200
    t = [132aaa] ---> 15:bad_cast
    t = [azea] ---> 16:bad_cast
    t = [0.] ---> v : 0.000000
    t = [.0] ---> v : 0.000000
    t = [.] ---> 19:bad_cast
    t = [] ---> 20:bad_cast
    t = [ ] ---> 21:bad_cast
    Je t'invite � aller sur ton tableur pr�f�r� v�rifier lequel correspond le mieux sa conversion en num�rique.

  17. #17
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir,

    Je savais bien que ma fonction de conversion de cha�ne en num�rique allait soulever un toll� de la part de ceux qui ne supportent pas qu' une m�thode fasse quarante deux lignes de programmation au minimum.

    Je pense que vous avez peut-�tre d�natur� ma m�thode, o� peut-�tre que vous ne disposez pas de la juste version de celle-�i.

    En ce qui concerne ma version, j' ai consid�r� que tout caract�re non num�rique ins�r� apr�s un caract�re num�rique est consid�r� comme une erreur, sauf si ce caract�re est un espace faisant partie de la terminaison de la cha�ne , qui se d�roule � saisir .

    J'ai du me tromper.

    Ceci dit, la version de Hylvenir me para�t tout � fait acceptable.

    A chacun de mettre les doigts sur les trous de sa passoir.

    Cordialement.

  18. #18
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    L'op�rateur d'extraction (>>) s'en occupe pour nous.
    Et on peut m�me imbuer (aucune traduction que je connaisse ; d'autant que la fonction membre s'appelle imbue) le flux utilis� pour utiliser des virgules au lieu des points (pour les flottants) en fonction de la des conventions langue (/r�gion) dans laquelle est �crit le nombre.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  19. #19
    Inactif  

    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    534
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 534
    Par d�faut
    Bonsoir

    L' extracteur ( >> ) fa�t bien le job, mais de mani�re impr�sise.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     
    string  z("123a788) ;
    istreamstring s(z) :
    double  d ;
    s >> d ; 
    // donera 123  alors qu'il y a faute dans z
    Cordialement.

  20. #20
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Utilise la fonction toT<short, rest::fail_explain>() que j'ai propos�e plus haut. Sans �tre parfaite, elle se d�brouille pas trop mal.

    Ceci dit, il faut toujours tester le r�sultat d'une lecture sur un flux.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Conversion List -> String
    Par Bayard dans le forum G�n�ral Python
    R�ponses: 1
    Dernier message: 27/11/2005, 21h50
  2. Conversion byte [] -> String
    Par MiJack dans le forum Langage
    R�ponses: 3
    Dernier message: 20/10/2005, 18h16
  3. [C#] Conversion System.String en System.Drawing.Color
    Par Silex dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 27/04/2005, 08h21
  4. R�ponses: 3
    Dernier message: 26/05/2004, 23h03
  5. Conversions de String � Integer
    Par Rank dans le forum Langage
    R�ponses: 5
    Dernier message: 06/08/2003, 16h30

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