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 :

sscanf et chaîne de caractère contenant des espaces


Sujet :

C++

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut sscanf et chaîne de caractère contenant des espaces
    Bonjour bonjour,

    voila j'ai un petit soucis concernant la fonction "sscanf" je m'en sert actuellement pour obtenir certaines données dans une chaîne de caractères par exemple :

    dans la chaîne de caractères :
    q { gsave } bind def
    avec la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nbVariableRecup= sscanf( temp.c_str(),"%s { %s } bind def",aRemplacer,remplacement);
    je peut obtenir la chaine "q" et la chaîne "gsave"

    or j'aurais besoin de pouvoir récupérer TOUT ce qui est entre mes parenthèses ainsi pour la chaîne :

    cm { 6 array astore concat } bind def
    j'obtiendrai "cm" et "6 array astore concat" or ce que j'obtiens pour la deuxième variable est : "6" a cause de l'espace après le "6"

    Existerait-il une solution a cela en utilisant sscanf ?

  2. #2
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    Essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nbVariableRecup= sscanf( temp.c_str(),"%s { %[^\n]s } bind def",aRemplacer,remplacement);
    Homer J. Simpson


  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    je viens d'essayer ça mais pour la ligne
    q { gsave } bind def
    je n'obtient plus "gsave" mais "gsave }bind def"

    je ne connais pas bien "[^\n]" mais est-il possible d'avoir deux conditions c'est à dire : \n et } pour éviter la boucle infini.

  4. #4
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    tu peux avoir:
    Mais si tu fais du C++ et pas du C alors n'utilises pas sscanf.


    EDIT: Renseigne toi sur les regex!
    Homer J. Simpson


  5. #5
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    je fait bien du c++, sscanf est la seule fonction que je connaisse qui fasse exactement ce que je veux ( je suis débutante donc tout les conseils sont bon a prendre ) que devrais-je utiliser à la place de sscanf?

    EDIT : en tout cas avec le sscanf ta solution "%[^\n}]s" fonctionne nickel ^^

  6. #6
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Tu dois utliser les std::tr1::regex ou std::regex ( tout va dépendre de la version de ton compilateur, le deuxième n'est dispo que depuis c++ 11)

    Il existe la librairie boost qui peut le faire mais un peu lourde pour débuter...


    Un solution est de travailler avec la std actuelle ( c++98 ):

    Un algorithme simple:

    Tu as ta chaîne "q { gsave } bind def".
    Tu cherche la position du premier { et du dernier }.
    avec std::string, std::find, les iterateurs tu dois pouvoir le faire très rapidement


    EDIT: regex veut dire REGular EXpression pour tes recherches google sur le sujet si tu veux en savoir plus!
    Homer J. Simpson


  7. #7
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    merci de ta réponse. Je vais essayer ça alors en tout cas merci beaucoup de votre aide

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

Discussions similaires

  1. Caractère numérique contenant des espaces
    Par nolll dans le forum SAS Base
    Réponses: 8
    Dernier message: 19/11/2019, 18h58
  2. Réponses: 2
    Dernier message: 07/08/2012, 16h20
  3. [MySQL] Affichage d’une chaîne de caractères contenant des parenthèses
    Par mathiotp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/11/2007, 20h31
  4. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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