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 :

Problème de conteneur char / int


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut Problème de conteneur char / int
    bonsoir ,

    Je veux copier les char un à un dans un vector :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char test[15]="0123456789";
    vector <int> num(9);
     
      for(int i=1; i<num.size(); ++i)
      {
      int tt=test[i-1];
      num.at(i)=tt;
      cout << num.at(i) << "---" << test[i-1] << endl;
     
      }
    48 -- 0
    49 -- 1
    50 -- 2
    51 -- 3
    52 -- 4
    53 -- 5
    54 -- 6
    55 -- 7
    C'est le passage char vers int , que je ne connais pas encore
    en C++ .


  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir !

    Et la question ?

    Pour passer de int à char suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int entier = 8;
    char caractere = entier;
    Les conversion entre type primitifs ne sont pas plus compliqués.

    Si le problème est le décalage :

    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
    #include <iostream>
    #include <string>
    #include <vector>
    int main()
    {
        std::string test("0123456789");//string est le conteneur de char par excellence
        std::vector<int> num(10);//zéro à dix
     
        for(int i = 0; i < num.size(); ++i)//un tableau commence à zéro
        {
            num[i] = test[i];//l'operator[] marche aussi ici
            std::cout << num.at(i) << "---" << test[i] << std::endl;
        }
        return 0;
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    C'est normal que cela ne fonctionne pas : tu prends un caractère donc un code ASCII et non pas un chiffre

    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
    #include<iostream>
    #include <iomanip>
    #include<vector>
     
    using namespace std;
     
     
    int main(int argc, char* argv[])
    {
        char test[]="0123456789";
        vector<int> num;
     
        unsigned char c = 0, len = 10 /*hardcoded*/;
     
        num.reserve(len);
     
        for(; c < len; ++c) {
            num.push_back(test[c] - '0' + 1);
        }
     
        for(c = 0; c < len; ++c) {
            cout << setw(2) << num[c] << "---" << test[c] << endl;
        }
     
    //  Extra: :-)
        cout << endl << "[";
     
        for(vector<int>::iterator it = num.begin(); it < num.end(); ++it) {
            cout << ((it != num.begin())? ", ": "") << *it;
        }
        cout << "]" << endl;
     
        return 0;
    }

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Pour les copier tels quels, on peut utiliser le constructeur de vecteur qui prend des itérateurs, voici un exemple C++98 :
    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
    // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
    // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main
     
    #include <iostream>
    #include <vector>
    #include <string>
    #include <cstring>
     
     
    int main()
    {
    	// Avec std::string
    	{
    		std::string s("Test avec std::string");
    		std::vector<int> v(s.begin(), s.end());
    		for (std::size_t i = 0; i < v.size(); ++i) { std::cout << v[i] << " "; } std::cout << std::endl;
    	}
     
    	// Avec char const * const
    	{
    		char const * const s = "Test avec char const * const"; // Utiliser std::string !
    		std::vector<int> v(s, s + strlen(s));
    		for (std::size_t i = 0; i < v.size(); ++i) { std::cout << v[i] << " "; } std::cout << std::endl;
    	}
     
    	return 0;
    }
    Si on veut les copier en les modifiant, on peut utiliser std::transform.

  5. #5
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    merci des conseils :

    char [] est trop restrictif

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par bm Voir le message
    merci des conseils :

    char [] est trop restrictif
    trop restrictif pour quoi?

    qu'est-ce que tu essaie de faire, exactement?

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

Discussions similaires

  1. problème: fgetc sur char 26 (=SUB) => EOF :(
    Par Sakijep dans le forum C
    Réponses: 13
    Dernier message: 09/04/2009, 22h39
  2. Réponses: 7
    Dernier message: 28/03/2006, 23h09
  3. type d'un char* ? int, float .... ?
    Par stitch dans le forum C
    Réponses: 5
    Dernier message: 08/03/2006, 16h27
  4. [javascript] problème char-int
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/02/2006, 17h32
  5. Conversion char/int à la lecture d'un fichier
    Par Gotterfdom dans le forum C++
    Réponses: 5
    Dernier message: 22/01/2006, 23h48

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