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 287
    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 287
    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 287
    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 287
    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 287
    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 287
    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 287
    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 287
    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 287
    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 287
    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