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 string en tableau d'entiers [Débutant(e)]


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut Conversion string en tableau d'entiers
    Bonjour,

    J'ai un petit souci.
    je souhaite convertir une ligne que je lis dans un fichier du type :
    "taille_matrice = 1434 1245 1535" en une variable vecteur [1434 1245 1535].

    j'arrive à isolé "1434 1245 1535" avec des .find et .substr

    et après j'essaye de convertir ça dans mon tableau de int.

    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    info = "1434 1245 1535"; //enfin info c'est un string avec ça. c'est pour ne pas remettre toutes les lignes de codes.
    stringstream info2(info);
    int test_conversion;
    info2 >> test_conversion;
    cout << test_conversion ;
    alors ça me renvoie 1434. donc à priori ça marche, ça convertie en int mais que la première valeure.
    si je fais ca ne compile pas parce que j'essaye de renvoyer un truc de 1 cellule vers 3 cellule.

    y a moyen simple d'arriver à convertir mon truc en un vecteur de 3 cellules ?
    où je suis obligé faire un truc moche et relou style chercher les espaces et découper etc ... des fois j'ai 2 cellules, des fois 3, des fois plus ... ça dépend de la ligne du fichier. alors un moyen "simple" serait le bienvenue.

    merci d'avance

  2. #2
    Membre éclairé

    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
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonsoir !

    Pour la conversion, le type int ne reçoit que des valeurs comprises entre -2 147 483 648 à 2 147 483 647.

    De plus les espaces ne sont pas lue comme tu le voudrais dans un string, soit tu les enlèves dès le début, soit tu les supprimes en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonString.erase(tonString.begin() + placeDansLeString);

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    oki.
    donc obligé de rechercher les espaces quoi ... et en plus find ne trouve que le premier espace c'est ça ? donc je dois faire un find. je trouve le premier. puis un deuxième find sur la suite du string. jusqu'à tant que find me renvoie -1 ?

    dommage j'espérais un truc plus simple.

    mais merci pour la réponse.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Pour la conversion, le type int ne reçoit que des valeurs comprises entre -2 147 483 648 à 2 147 483 647.
    Non, int accepte au minimum des valeurs comprises entre -32767 et 32767 cf FAQ.
    Après ces plages de valeurs changeront selon l'implémentation.
    Même si l'int est généralement codé sur 32 bits rien n'empêche d'avoir sur une architecture un int codé sur 16 bits (assez vieux quand même ) ou sur 64 bits.

    Pour être sûr des valeurs extremums, il faut regarder le fichier limits.h ou utiliser stdint.h

    @svagrim : Sinon tu peux utiliser très facilement un stringstream pour lire ton fichier de façon formaté.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    j'utilise un getline (pour obtenir info), ça a appartient pas à stringstream?
    tu veux dire quoi, qu'au lieu d'ouvrir le fichier ligne par ligne j'ouvre toute la première partie ne contenant pas l'image d'un coup avec un stringstream ?
    comment tu fais ça ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par svagrim Voir le message
    ca ne compile pas parce que j'essaye de renvoyer un truc de 1 cellule vers 3 cellule.

    y a moyen simple d'arriver à convertir mon truc en un vecteur de 3 cellules ?
    où je suis obligé faire un truc moche et relou style chercher les espaces et découper etc ... des fois j'ai 2 cellules, des fois 3, des fois plus ... ça dépend de la ligne du fichier. alors un moyen "simple" serait le bienvenue.

    merci d'avance
    tu peux les extraire avec l'operateur >> (comme tu fais actuellement) et une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string info = "1434 1245 1535"; //enfin info c'est un string avec ça. c'est pour ne pas remettre toutes les lignes de codes.
    stringstream info2(info);
    int val;
    vector<int> vals;
     
    while(info2.good()) {
        info2 >> val;
        vals.push_back(val);
    }

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ça marche.
    impeccable

    merci

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

Discussions similaires

  1. Tableau de String en tableau d'entiers
    Par keyser9 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/04/2013, 17h52
  2. Tableau de String en tableau d'entiers
    Par keyser9 dans le forum C#
    Réponses: 1
    Dernier message: 26/04/2013, 09h42
  3. conversion string en tableau
    Par stef_dup dans le forum LabVIEW
    Réponses: 12
    Dernier message: 26/11/2009, 15h55
  4. convertir String en tableau d'entier
    Par alouha dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 18/06/2008, 21h43
  5. Conversion String en tableau de Byte
    Par riete dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/09/2007, 09h27

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