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 :

Découper un const char*


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Inscrit en
    Septembre 2008
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 206
    Par défaut Découper un const char*
    Bonjour,

    J'essaye de découper un const char* par rapport au caractere : contenu dans la variable.
    La variable contient une ligne sous la forme "Ligne : blablaabla".

    Je n'ai pas trouvé de méthode qui permet de le faire.

    Donc pour l'instant j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(contenu[i] != ':')
    {
    	/* Premiere partie avec le nom de la ligne */
    	temp[i] == contenu[i];
    	i++;
    }
    while(contenu[i] != '\0')
    {
    	/* Deuxieme partie avec le contenue */
    	temp2[i] == contenu[i];
    	i++;
    }
    Mais le probleme est que ça ne marche pas !
    Existerais t-il une autre solution svp ?

  2. #2
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Si tu fais du C++, tu pourrais utiliser des std::string.
    Cette classe contient les fonctions nécessaires à ce que tu veux faire.

    http://www.cplusplus.com/reference/string/string/

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par BaStaub Voir le message
    Donc pour l'instant j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(contenu[i] != ':')
    {
    	/* Premiere partie avec le nom de la ligne */
    	temp[i] == contenu[i];
    	i++;
    }
    Mais le probleme est que ça ne marche pas !
    Existerais t-il une autre solution svp ?
    Dans le premier while comme c'est conçu tu vas faire exploser contenu !
    Comme un tableau de charactères est terminé par \0 , si tu ne trouves pas le charactère ':' est bien tu obtiens un dépassement de tableau et un while qui boucle indéfiniment.
    Sinon oui il est vraiment conseillé d'utiliser std::string

  4. #4
    Membre éclairé
    Homme Profil pro
    Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Inscrit en
    Septembre 2008
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 206
    Par défaut
    C'est vrai, je n'avais pas pensé a la boucle infini

    Je vais essayé les std::string

    Merci

  5. #5
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    Sinon, si tu veux te la jouer old-school, vas voir là :

    http://opengroup.org/onlinepubs/0079...sh/strtok.html

    La fonction strtok permet de découper une chaîne en fonction de délimiteurs (par exemple ':').

    Mais c'est vrai, tu es sur le forum C++ donc utilise les STL !

    Hadrien

  6. #6
    Membre éclairé
    Homme Profil pro
    Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Inscrit en
    Septembre 2008
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 206
    Par défaut
    J'utilise maintenant les std::string mais je n'arrive pas à le séparer en 2.
    La ligne que je doit séparée (qui est contenue dans un fichier) est de cette forme :
    aaaaa : bbbbbbb
    Sauf que le ":" (qui est le caractere séparateur) n'est pas toujours a la même place.

    Je voulais essayé la méthode substr() mais apparemment, le deuxième paramètre correspond à la position du séparateur (à ce que j'ai compris)...

    Quelqu'un peut m'aider ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Inscrit en
    Septembre 2008
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Spécialiste en Maintenance Applicative / Developpeur C#, VB, PL-SQL, T-SQL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 206
    Par défaut
    C'est bon j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* Trouve la position du caractere ":" dans la ligne */
    size_t found = line.find_first_of(":");
    /* Calcule la taille totale de la ligne */
    size_t size = line.length();
    size_t i = size - found;
    /* Copie la premiere partie de la ligne dans la variable temp */
    std::string temp = line.substr(0, i);
     
    if(line.find("Ligne") != std::string::npos)
    {
    	/* Traitement */
    }
    Donnez moi votre avis, au cas ou il ai plus simple

  8. #8
    Membre éclairé Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    Citation Envoyé par BaStaub Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(contenu[i] != ':')
    {
    	/* Premiere partie avec le nom de la ligne */
    	temp[i] == contenu[i];
    	i++;
    }
    while(contenu[i] != '\0')
    {
    	/* Deuxieme partie avec le contenue */
    	temp2[i] == contenu[i];
    	i++;
    }
    Mais le probleme est que ça ne marche pas !
    ...
    Changez le code à (notez la difference entre == et = ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(contenu[i] != ':')
    {
    	/* Premiere partie avec le nom de la ligne */
    	temp[i] = contenu[i];
    	i++;
    }
    while(contenu[i] != '\0')
    {
    	/* Deuxieme partie avec le contenue */
    	temp2[i] = contenu[i];
    	i++;
    }
    -- Steve

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/10/2005, 12h11
  2. [Appli Console]Pb exec command ac fct system(const char *)
    Par Le_magicien999 dans le forum MFC
    Réponses: 2
    Dernier message: 16/08/2005, 16h07
  3. Conversion CString en const char*
    Par LRobi dans le forum MFC
    Réponses: 8
    Dernier message: 19/07/2005, 12h12
  4. Réponses: 13
    Dernier message: 06/03/2005, 15h21
  5. Pb d'nitialisation d'un const char*
    Par davkick dans le forum C++
    Réponses: 9
    Dernier message: 09/12/2004, 16h27

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