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 :

Implémenter sa propre fonction split()


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Implémenter sa propre fonction split()
    Bonjour à tous,
    Il existe en Python 3 une fonction str().split() qui sert à découper une chaîne en fonction de son séparateur.
    J'ai réussi à en implémenter une avec un séparateur de type char, mais je bloque pour faire une surcharge avec cette fois un séparateur de type std::string (pour avoir plusieurs caractères).
    J'aimerais juste un algorithme détaillé pour savoir comment m'y prendre (je m'occupe de le traduire en c++).

    Si ça peut servir, voici le code de ma fonction avec un séparateur char :
    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
    #include <vector>
    #include <string>
     
    std::vector<std::string> couper_chaine(std::string const chaine, char const separateur = ' ') {
    	std::vector<std::string> tableau;
    	std::string element = "";
    	for (auto i = 0lu; i < chaine.size(); i++) {
    		if (chaine[i] != separateur) {
    			element += chaine[i];
    		}
    		else if (chaine[i] == separateur && element != ""){
    			tableau.push_back(element);
    			element = "";
    		}
    		if (i == chaine.size() - 1 && element != "") {
    			tableau.push_back(element);
    		}
    	}
    	return tableau;
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Tu te prends la tête pour rien et en plus cela ressemble + à du C

    Il faut faire 1 truc proche de :
    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
    #include <iostream>
    #include <string>
    #include <vector>
     
    #include <cstdlib>
     
     
    const unsigned char G_SEPARATOR_CHAR = ';';
     
     
    int main()
    {
        std::vector<std::string> array;
    //  std::string str("15;toto;tata;azerty;35;");
        std::string str("15;toto;tata;azerty;35");
        std::size_t found      = str.find_first_of(G_SEPARATOR_CHAR),
                    last_found = 0,
                    tmp_size   = str.length();
     
        while (found != std::string::npos) {
            array.push_back( str.substr(last_found, (found - last_found)));
            last_found = (found + 1);
            found = str.find_first_of(G_SEPARATOR_CHAR, last_found);
        }
     
    //  Test if one last element is present
        if (last_found < tmp_size) {
            array.push_back( str.substr(last_found, (tmp_size - last_found)));
        }
     
    //  XXX DEBUG: display array
        for(found=0, tmp_size=array.size(); found < tmp_size; ++found) {
            std::cout << (found + 1) << ": " << array[found] << std::endl;
        }
     
     
        return EXIT_SUCCESS;
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour la réponse, en effet ça ressemble à du C (j'ai essayé de me passer des fonctions de la STL), mais je n'ai pas trop réussi.
    J'ai trouvé une solution sur StackOverflow.
    Désolé pour le dérangement et encore merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par totosayen Voir le message
    Désolé pour le dérangement et encore merci
    Tu m'étonnes le dérangement le gars "pose la solution" mais j'ai donné la même solution 1 jour avant.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par foetus Voir le message
    Tu m'étonnes le dérangement le gars "pose la solution" mais j'ai donné la même solution 1 jour avant.
    Oui oui, je sais mais j'ai pas compris tout de suite comment ça a marché donc et je me suis un peu renseigné sur les fonctions utilisées (le prenez pas mal).

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  2. [String] fonction split
    Par tck-lt dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2005, 17h45
  3. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21
  4. [XML+XSLT+MSXML] Ecrire ses propres fonctions
    Par görgh dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 19/05/2005, 13h04
  5. [Fortran 90] Fonction Split()
    Par gchazelle dans le forum Fortran
    Réponses: 2
    Dernier message: 02/03/2005, 10h16

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