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

SL & STL C++ Discussion :

Remplacer sscanf par ?


Sujet :

SL & STL C++

  1. #1
    Membre du Club Avatar de Atikae
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 56
    Points
    56
    Par défaut Remplacer sscanf par ?
    Bonjour tout le monde.

    Hier soir je me suis retrouvé confronté à un problème, le fait d'écrire dans une string avec un élément que me renvoie sscanf.
    Voici ma ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(line.c_str(), "%1024s[^\n\r]", grfArray[nbrLine].name.c_str())
    Mais je ne peux écrire dans une constant char (ce que renvoit c_str()).
    J'ai essayer de le caster, ça ne marche pas.
    J'ai essayer de prendre son adresse avec &, mais rien ne marche.

    Je me suis résolu à trouver un moyen de le faire en C++.
    On m'a parlé de istringstream de std.
    Mais je n'ai pas du tout compris comment m'en servir.

    Quelqu'un pourrait éclairer ma lanterne ? Comment traduire mon sscanf en istringstrem ? Est-ce bien istringstream qu'il faut utiliser, ou autre ?

    Merci d'avance.
    Amicalement,
    Atikae.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut bien utiliser istringstream. La FAQ C++ explique en détail tous les manipulateurs que tu peux utiliser avec pour faire ce que tu veux.

    Par contre je ne suis pas certain que tu arriveras à reproduire facilement le manipulateur de type expression régulière. Mais vu celle que tu utilises, je pense qu'un simple std::getline fera l'affaire (voir FAQ, comme d'hab).

    Sinon, puisque la taille est fixe, tu peux toujours contourner de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char Buffer[1025];
    sscanf(line.c_str(), "%1024s[^\n\r]", Buffer);
    grfArray[nbrLine].name = Buffer;

  3. #3
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    ce que tu veux c'est prendre tout de buffer jusqu'au premier \r, \n ou espace?
    Si oui,
    alors le code suivant peut faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    istringstream iss;
    iss.str(buffer);
    iss >> line;
    Sinon, tu peux à la limite faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf((char*)(void*)line.c_str(), "%1024s[^\n\r]", grfArray[nbrLine].name.c_str());
    Mais alors après, la string va plus savoir sa propre longueur et donc ça va aller mal.

    Encore une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int pos = grfArray[nbrLine].name.find_first_of(" \r\n");
    line = grfArray[nbrLine].name.substr(0, pos);

  4. #4
    Membre du Club Avatar de Atikae
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 56
    Points : 56
    Points
    56
    Par défaut
    J'utilise la variable temporaire. Mais pour la curiosité je voudrais utilisé isstringstream.

    Le problème c'est que j'ai un sscanf comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(line.c_str(), "%1024s | %1u", Buffer, &grfArray[nbrLine].status)
    Comment le traduire ?

  5. #5
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Désolé, concrètement ça fait quoi ton code?

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2006, 12h02
  2. Remplacer null par...
    Par HichamK dans le forum Oracle
    Réponses: 4
    Dernier message: 17/01/2006, 13h56
  3. Réponses: 2
    Dernier message: 14/11/2005, 13h33
  4. [Configuration] remplacement des é par des i
    Par illegalsene dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/10/2005, 16h37
  5. [ASP] include remplacer chemin par variable
    Par damn dans le forum ASP
    Réponses: 3
    Dernier message: 01/10/2004, 15h27

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