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 :

prb ragant: string to int[]


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut prb ragant: string to int[]
    bonjour, je me fais un petit programme et j'ai eu besoin de transformer un
    std::string avec plusieur valeur int en un tableau d'int
    le programme se compile, s'executer, et plante a un endroit ou ca n'a pa de sense.
    si quelqu'un a une id�� j'ecoute
    voici le code
    merci



    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
     
    #include <cstdlib>
    #include <iostream>
    #include <sstream>
    #include <stdlib.h>
    #include <string>
    #include <fstream>
    #include <math.h>
     
    //#include <pr/linked_list.h>
     
    using namespace std;
    int main()
    { string df="23,34,2,5";
      string tm;
      int ln, x, x2, lc=0, c=0, d=0, dd=0;
      ln=df.length();
      for(x=0;x!=ln;x++)
                        {if (df.find(",",x)==x)  //si a la possision x y'a une ","
                        lc++;
                        };
     
    int *tab=new int[lc];  //tableau pour les valeur recuperer
    cout<<"ca passe 1\n";
     
    for(x=0;x!=ln;x++)
                      {
                       cout<<"ca passe 2\n";
                       if (df.find(",",x)==x)  //si a la possition x il y'a ","
                           { for(x2=x-c;x2!=x;x2++){tm[d]=df[x2]; //copie de la derniere "," a la suivante
    			                                   	d++;};   
                           c=0;
                           tab[dd] = x;  //je simplifie pour ecarter une erreur possible de sstream
                           dd++;
                           tm.clear();
                           }
                       else{          //si y'a pa de "," il y a au moin 1chiffre de plus
    	                    c++;}   //c: compteur du nombre de chiffre
                         };
     
    cout<<"k\n";  //il y avé une boucle for pour afficher tab, ca n'afficher que un 0 et plantage
    return 0;
    };

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    Ton code est trop confus, essaye de le simplifier :
    - utilise un std::istringstream pour parser la chaine
    - utilise l'op�rateur >> pour lire les entiers
    - utilise l'op�rateur >> vers un char pour lire les s�parateurs
    - utilise un std::vector<int> pour stocker les entiers

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut
    c ce k'il y av� a la place de

    c=0;
    tab[dd] = x; //je simplifie pour ecarter une erreur possible de sstream
    dd++;

    mais l'erreur ne vien pa de la.
    le code s'exectue jusqu'a la fin, et une erreur apparait
    enfin, celle de windows : erreur journal en cour de creation
    alors qu'il ne le cr�� meme pas.
    j'ai essayer de faire de debugage mais ca ne m'avance a rien
    je v� essayer de reecrire le code source pour demain
    pour eclaircir l'operation

    la parti qui remplacer avant tab[dd] = x;
    etait:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    istringstream istr( tm );
    istr >> tab[dd]; 
    tab[dd]=strtol(tm);

  4. #4
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par biftek
    c ce k'il y av� a la place de

    c=0;
    tab[dd] = x; //je simplifie pour ecarter une erreur possible de sstream
    dd++;

    mais l'erreur ne vien pa de la.
    le code s'exectue jusqu'a la fin, et une erreur apparait
    enfin, celle de windows : erreur journal en cour de creation
    alors qu'il ne le cr�� meme pas.
    j'ai essayer de faire de debugage mais ca ne m'avance a rien
    je v� essayer de reecrire le code source pour demain
    pour eclaircir l'operation
    biftek, je n'ai pas tout cit�, mais essaye d'�crire un peu plus fran�ais stp, ca am�liorera la lisibilit� sur ce thread.
    merci

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut
    dsl, je ferai en sorte de m'apliqu� pour demain.
    bonne soir� a tous (qui son sur notre continent)

  6. #6
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par biftek
    dsl, je ferai en sorte de m'apliqu� pour demain.
    bonne soir� a tous (qui son sur notre continent)
    je pense que tu peux t'y atteler d�s aujourd'hui !!! lol

    ps: pourquoi tu dis pas bonsoir aux autres (qui sont pas sur "notre continent") ??

  7. #7
    Membre �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    et en utilisant getline() ? � moins que �a soit un exo de cours.. d�sol� si c'est pas ce que tu veux faire, mais �a me parait plus simple

    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
     
    #include <string>
    #include <sstream>
    #include <vector>
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
        // valeurs à insérer au tableau
        std::string values = "1,12,13";
     
        // tableau dynamique
        std::vector< int > intVector;
     
        // stream utilisé par getline    
        std::istringstream ssvalues( values );
        std::string wordFound;
     
        //getline renvoi chaque valeur séparée par ',' tant qu'il en reste dans wordFound
        while( std::getline( ssvalues, wordFound, ',' ) )
        {
            int intValue = 0;
     
            // conversion string vers int
            std::istringstream ssvalue( wordFound );   
            ssvalue >> intValue;
     
            // ajoute au vecteur
            intVector.push_back( intValue );                                     
        }
     
        return 0;
    }

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut
    oui c'est a peu pres ca.
    ben je leur di pas bonsoir parce qu'ils sont dans un fuseau horaire trop d�caler
    (y'a l'afrique...)

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut
    donc j'ai tous r��cris du debut, et bien sur pas de probl�me.
    Le programme reste toujours assez illisible mais ca marche.

    merci pour la solution avec le vecteur.
    voici donc le resultat:

    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
    #include <sstream>
    #include <string>
     
    using namespace std;
    #define np string::npos
     
    int str_int(string a);               //string to int
    int nbr_element(string a, int ln);  //retourne le nombre d'élément d'élimiter par ","
     
    int main()
    {string b;
    string tmp;       //pour la sous-chaine avec l'int
    int e, fc, nb;     //les position des "," et le nombre d'element
    int x=0;             //pour les boucles
    int ln, pos=1;  //pour la longeur de b, et la possition des copie dans res[]
    getline(cin,b);
     
    ln=b.length();
    nb=nbr_element(b,ln);
    int *res = new int[nb];     //on crée le tableau d'int
     
    e=b.find_last_of(",")  ;      //on recopie le dernier
    tmp.assign(b,e+1,ln-1);
    res[nb-1]=str_int(tmp);
    nb-=2;
     
    e=b.find(",",0);            //on recopie le premier
    tmp.assign(b,0,e);
    res[0]=str_int(tmp);
     
     
    x=1, e=0;
    while(x)                          //reperage des nombres et sauvgarde
    {e=b.find(",",e+1);
     fc=b.find(",",e+1);      // a partir du nouveau e
     
     if ((e!=np)&&(fc!=np))
        {
        tmp = b.substr(e+1,fc-e-1); 
        res[pos]=str_int(tmp);
        pos++;
        }
        else{
             x=0;
            };
    };
     
     
    nb=nbr_element(b,b.length());    //affichage du resultat
    for(x=0;x!=nb;x++)
    cout << res[x] << "\t";
    return 0;
     
    };
     
     
     
    int str_int(string a)
    {
        istringstream iss(a);
        int tm;
        iss>>tm;
        return tm;
    }
     
    int nbr_element(string a, int ln)
    {     int x=0, lc=0;
          while(x!=np)
                      {x=a.find(",",x+1);
                      if (x!=np)  //si a la possision x y'a une ","
                      lc++;
                        };
          lc++;
          return lc;
          };

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut correction
    je raconte n'importe quoi:
    merci a nikko34
    et en utilisant getline() ? � moins que �a soit un exo de cours.. d�sol� si c'est pas ce que tu veux faire, mais �a me parait plus simple
    , j'av� mal regarder, et avec une petite modif
    ca m'aurai fait gagner quelque heure
    entre autre la FAQ proposse une solution tr�s proche:

    http://c.developpez.com/faq/cpp/?pag...#STRING_tokens

    encore merci a tous

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Par d�faut
    donc voila le resultat final


    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
     
    #include <cstdlib>
    #include <iostream>
    #include <stdlib.h>
    #include <sstream>
    #include <string>
     
    using namespace std;
     
    #define np string::npos
     
    int str_int(string a);
    int nbr_element(string a); //, int ln);
     
    int main()
    {
    string tmp;     //pour la sous-chaine avec l'int
    int e, fc, nb;  //les position des "," et le nombre d'element
    int x=0;        //pour les boucles
    int ln, pos=0;  //pour la longeur de b, et la possition des copie dans res[]
    string b;
    istringstream iss;
     
    getline(cin,b);
    iss.str(b);     //affectation
    ln=b.length(); //longeur ...
    nb=nbr_element(b);
     
    int *res = new int[nb]; // on crée le tableau d'int
     
    while ( getline( iss, tmp, ',' ) )  //d'apres la FAQ extraction grace au delimiteur
    {res[pos]=str_int(tmp);
    pos++;}
     
    nb=nbr_element(b);
    for(x=0;x!=nb;x++)
    cout << res[x] << "\t";
    return 0;
    };
     
     
    int str_int(string a)
    {
        istringstream iss(a);
        int tm;
        iss>>tm;
        return tm;
    };
     
    int nbr_element(string a) 
    {     int lc=0, x=0;      
          while (x!=np) 
          {x=a.find(",",x+1);
          lc++;}
          return lc;
          };

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Debutant]Transformer string en int
    Par htaou dans le forum SL & STL
    R�ponses: 7
    Dernier message: 09/09/2005, 21h28
  2. [D�butant] Conversion d'un String en Int
    Par chleuh dans le forum Langage
    R�ponses: 9
    Dernier message: 30/12/2004, 13h33
  3. [d�butant] String ou int
    Par pingoui dans le forum Langage
    R�ponses: 42
    Dernier message: 16/09/2004, 09h16
  4. R�ponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    R�ponses: 3
    Dernier message: 26/05/2004, 15h00

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