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 :

Comment eclater un string ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut Comment eclater un string ?
    Bonjour a tous.

    Tout d'abord je tiens a m'excuser si ce sujet a déjà été traité, cependant je n'est pas trouvé de sujet répondant à mon problème, je m'explique :

    Je souhaiterai "eclater" une string en plusieurs string :

    exemple : string str1 = "az3rt";

    string str2 = "a";
    string str3 = "z";
    string str4 = "3";
    string str5 = "r";
    string str6 = "t";


    est ce que cela est possible selon vous et si oui comment ?

    Je vous remercie par avance de votre aide et vous souhaite de passer une agréable journée.

    Djaydjay13.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum

    Si l'idée de base est de récupérer chaque caractère de la chaine séparément, tu peux envisager le recours à l'opérateur [], en prenant en compte que l'index du premier caractère est 0.

    Ainsi, plutôt que d'avoir N variables différentes (ce qui peut toujours occasionner certains problèmes), tu peux considérer ta chaine comme étant... une succession de caractères:
    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
    #include <string>
    #include <iostream>
    int main()
    {
        std::string str("az3rt");
        /* récupération de la taille de la chaine */
        size_t taille=str.size();
        for (size_t i=0;i<taille;++i)
        {
            /* récupération du caractère se trouvant à l'indice i */
            char c=str[i];
            /* on peut l'afficher, ou en faire ce que l'on veut :D */
            std::cout<<c<<std::endl;
            /* ce pourrait être créer une autre chaine de type std::string */
            std::string temp=c;
        }
        return 0;
    }
    Si l'idée est de récupérer des sous chaines de caractères qui sont, typiquement, composées de plusieurs caractères, tu peux utiliser la fonction membre substr associée à aux fonctions membres find et similaires (rfind find_first_of,...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <string>
    #include <iostream>
    int main()
    {
        std::string str("az3rt");
        /* séparons ce qu'il y a avant le "3" de ce qui vient après */
        std::string ch1=str.substr(0,str.find('3'));
        std::string ch2=str.substr(str.find('3')+1);
        std::cout<< ch1 <<std::endl
                 << ch2 <<std::endl;
        return 0;
    }
    Enfin, si l'idée est de transformer une chaine de caractères contenant des valeurs numériques en... valeurs numériques dont le type est adapté, il faudra sans doute passer par les flux de conversion *stringstream.

    Et ceci n'est qu'un premier aperçu rapide
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut
    C'est parfait !

    La première solution est exactement ce que je cherchais , je te remercie de ta réponse claire et rapide.

    Bonne fin de journée.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut
    Aie !

    Désoler, mais un autre petit problème se pose à moi...

    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
     
    // Je recois un int
     int entier = 2387;
     
    // Je convertis cet int en string
        std::ostringstream conv_int;
        conv_int << entier ;
     
     
        size_t taille=conv_int.str().size();
     
     
        for (size_t i=0;i<taille;++i)
        {
     
            char c=conv_int.str()[i];
     
     
    // le problème est ici, il n'accepte pas la conversion du char en string
            std::string temp=c;
     
            std::cout<<temp<<std::endl;
        }


    l'erreur est la suivante :
    error: invalid conversion from `char' to `const char*'


    Je suis bloqué puisque il me faut absolument un string en sortie

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Au temps pour moi... je corrige:
    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
    #include <string>
    #include <iostream>
    int main()
    {
        std::string str("az3rt");
        /* récupération de la taille de la chaine */
        size_t taille=str.size();
        for (size_t i=0;i<taille;++i)
        {
            /* récupération du caractère se trouvant à l'indice i */
            char c=str[i];
            /* on peut l'afficher, ou en faire ce que l'on veut :D */
            std::cout<<c<<std::endl;
            /* ce pourrait être créer une autre chaine de type std::string */
            std::string temp(&c,1);
        }
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Par défaut
    Génial !

    Encore merci !

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/06/2005, 19h06
  2. [Date] Comment transformer mon String en date avec newDate?
    Par Devil666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/06/2005, 16h50
  3. Comment definir un string java en c++
    Par chelguera dans le forum C++
    Réponses: 13
    Dernier message: 31/12/2004, 12h56
  4. Comment sauver plusieurs String ?
    Par Speed41 dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2004, 13h49

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