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 :

conversion de vecteur de string en entier?


Sujet :

C++

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    J'ai un problème me disant que la fonction "transform" prend 5 paramètres et pas 4

    Bizarre!

  2. #22
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Poste ton code en entier et on verra peut être une erreur dedans...

    Si il te dit que la methode n'a pas le bon nombre d'arguments, n'y aurait il pas un problème de namespace?

  3. #23
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Il y a 2 versions de std::transform :
    - 4 arguments :
    1 seul intervalle source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    transform (coll1.begin(), coll1.end(),      // source range
                   coll1.begin(),                   // destination range
                   negate<int>());                  // operation
    - 5 arguments : deux intervalles source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        // print differences of two corresponding elements
        cout << "diff:    ";
        transform (coll1.begin(), coll1.end(),       // first source range
                   coll2.begin(),                    // second source range
                   ostream_iterator<int>(cout, " "), // destination range
                   minus<int>());                    // operation
    Après je ne sais pas pourquoi Visual ne t'autorise pas la première version.

    Pour ton problème essayes peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::transform(vect.begin(),
                           vect.end(),
                           vect.begin(),
                           std::back_inserter(vectint),
                           &StringToInt);
    (non testé)

  4. #24
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    [QUOTE=befalimpertinent;2529091]Il y a 2 versions de std::transform :
    - 4 arguments :
    1 seul intervalle source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    transform (coll1.begin(), coll1.end(),      // source range
                   coll1.begin(),                   // destination range
                   negate<int>());                  // operation
    - 5 arguments : deux intervalles source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        // print differences of two corresponding elements
        cout << "diff:    ";
        transform (coll1.begin(), coll1.end(),       // first source range
                   coll2.begin(),                    // second source range
                   ostream_iterator<int>(cout, " "), // destination range
                   minus<int>());                    // operation
    Après je ne sais pas pourquoi Visual ne t'autorise pas la première version.
    [\QUOTE]
    Merci pour l'explication des 5 arguments. je ne connaissait pas.
    Mais Visual accepte la première version.
    Le bout de code que j'ai donné marche sous visual et gcc

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Maintenat le débogueur me dit qu'il y a un 5 arguments alors qu'il en faut 4.
    Je dois avoir une autre erreur qui engendre celle-ci!

    Mon code:

    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
     
     
    {....
    std::vector< int > VecDataInt; 
    	std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&StringToInt);
    	f2.Close();
    }
     
     
    int CData::StringToInt (std::string &s)
    {
      std::istringstream iss( s);
        // convertir en un int
        int nombre;
        iss >> nombre;
      return nombre;
    }

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    essai plustôt


    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
    int StringToInt (std::string &s)
    {
      std::istringstream iss( s);
        // convertir en un int
        int nombre;
        iss >> nombre;
      return nombre;
    }
     
     
     
    {....
    std::vector< int > VecDataInt; 
    	std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&StringToInt);
    	f2.Close();
    }

    pour ton code il aurait fallu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class CData
    {
    ...
    static  int StringToInt (std::string &s);
    ...
    }
    
    
    {....
    std::vector< int > VecDataInt; 
    std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&CData::StringToInt);
    }

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Merci beaucoup.

    Pourquoi il faut que la valeur retouréne soit statique?

  8. #28
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    ou plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),boost::bind(&CData::StringToInt, boost::ref(c_data), _1) );
    avec c_data instance de C_Data

  9. #29
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par toutounesan Voir le message
    Merci beaucoup.

    Pourquoi il faut que la valeur retouréne soit statique?
    Bonne question...
    Il se trouve qu'une fonction membre comprend implicitement un parmètre de plus, c'est instance de la classe...
    Une fonction membre (pas statique) de n paramètres est en fait toujours une fonction de (n+1) paramètres, car il y a le pointeur this.

  10. #30
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par toutounesan Voir le message
    Merci beaucoup.

    Pourquoi il faut que la valeur retournée soit statique?
    ce n'est pas la valeur retourné mais la fonction qui est static. I.E.: deviens indépendant de la class et n'as donc pas besoin d'une instance pour être utilisé.

    Juste une question. Peut être dans un de tes autre post. Pourquoi ne remplie tu pas directement un vecteur de int? sans passer par un vecteur de string?

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Je récupére mes données (entier pour l'instant) et string (plus tard) à partir d'un fichier au format texte.
    Je ne sais pas comment on fait pour lire les données au bon format en lisant les données (si on sait de qu'elle type elles sont)

  12. #32
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par toutounesan Voir le message
    Je récupére mes données (entier pour l'instant) et string (plus tard) à partir d'un fichier au format texte.
    Je ne sais pas comment on fait pour lire les données au bon format en lisant les données (si on sait de qu'elle type elles sont)
    Tu peut te baser sur le fonction StringToInt.
    En gros tu lie une string et tu la convertie en ce que tu veut. Puis tu stock le résultat.
    Pour les type primitif tu pourrai utiliser une fonction template

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //peut être que le const est en trop
    template <class T>
    T ConvertString (const std::string &s)
    {
      std::istringstream iss( s);
        // convertir en T
        T tmp;
        iss >> tmp;
      return tmp;
    }
    ou T et le type que tu veut

    par exemple
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::string s("10");
     
    int nombre = ConvertString <int>(s);

Discussions similaires

  1. Conversion string to entier <=>
    Par YanDerS dans le forum LabVIEW
    Réponses: 2
    Dernier message: 28/06/2010, 18h54
  2. Conversion string en entier via istringstream
    Par Guyzeug dans le forum C++
    Réponses: 2
    Dernier message: 09/06/2008, 14h42
  3. Conversion d'un string en entier
    Par taquilla dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/11/2007, 21h59
  4. conversion string vers entier
    Par k_boy dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 11/04/2007, 13h33
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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