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 :

Manipuler une chaine


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut Manipuler une chaine
    Bonjour tout le monde,
    Je suis un rescapé du C qui tente de retrouvé ses repère en C++.
    Je tente de coupe un string en deux string suivant un espace.
    J'ai chercher dans la FAQ, et je trouvé ce code :
    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
    17
    18
    19
    20
    21
    #include <vector>
    #include <sstream>
    #include <iostream>
    #include <iterator>
     
    int main()
    {
        using namespace std;
     
        string str = "mot1 mot2 mot3 mot4 mot5 mot6";
     
        vector<string> str_list; // liste de mots
     
        // remplir la liste de mots
        istringstream iss( str );
        copy(
            istream_iterator<string>( iss ),
            istream_iterator<string>(),
            back_inserter( str_list ) );
        return 0;
    }
    Je trouve ça un peu complexe, surtout que en C j'aurais fait un bête sscanf avec le format "%s %s" pour couper deux chaines suivant un espace.
    Le code fournit par la FAQ est effectivement puissant, car il suppose que je ne connait pas le nombre d'espace, et le nombre de sous chaine que la chaine contient. Mais moi je sais que ma chaine ne contient que 2 sous chaine séparer par un espace, alors à quoi bon la liste?
    Merci de me donner la méthode si vous pensez qu'il y a mieux. Et je pense bien qu'il y a mieux car en C ça ne fait qu'une ligne (comprenez j'adore *scanf).
    Merci à vous

    [EDIT] : J'ai oublié de vous dire que la chaine de base provient d'un fichier texte sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne1mot1 ligne1mot2
    ligne2mot1 ligne2mot2
    Il faut lire la première ligne, ensuite diviser la ligne en deux chaines. Rien de mieux en C que fscanf() qui va me faire les deux étapes à elle toute seule(format "%s %s" toujours).
    En PHP il y a la fonction explode.
    Et en C++?
    Encore merci

  2. #2
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Je vais me répondre moi même car en expérimentent un peu, je crois que j'ai trouvé ce que je voulais, mais j'attend quand même que l'on me dise s'il n'y a pas mieux :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string str1,str2;
    while(getline(fichier, str1,' ') && getline(fichier, str2))  // tant qu'il y a qqch à lire
    {
            cout << str1 <<'+'<<str2<< endl;  // on l'affiche
    }
    Alors vous en pensez quoi?

  3. #3
    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
    C'est une solution viable. Une solution plus simple, si la notion de ligne n'est pas importante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string str1,str2;
    while(fichier >> str1 >> str2)  // tant qu'il y a qqch à lire
    {
            cout << str1 <<'+'<<str2<< endl;  // on l'affiche
    }

  4. #4
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Non non la ligne est importante.
    Je parcour le fichier avec un while, et à chaque itération il faut séparer les deux.
    Alors?
    Sinon supposons que je n'avait pas le fichier, comment j'aurais fais pour séparer la chaine en 2?

  5. #5
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::string::size_type p = str.find_first_of(' ');
    std::string mot1(line.begin(), line.begin()+p);
    std::string mot2(line.begin()+p+1, line.end());

  6. #6
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    C'est pas con, merci screetch !

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

Discussions similaires

  1. Script pour manipuler une chaine d'un nom de fichier
    Par mond14 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/05/2013, 20h37
  2. Manipuler une chaine de caractère.
    Par jamsgoodon dans le forum Débuter
    Réponses: 1
    Dernier message: 14/04/2011, 19h56
  3. manipuler une chaine de caractere
    Par l_achraf dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/05/2009, 17h47
  4. Comment manipuler une chaine de caractère
    Par belmehdi17 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/03/2008, 16h03
  5. Manipuler une chaine de caracteres
    Par virtu67 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/12/2006, 15h31

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