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 :

string : conversion et recherche


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut string : conversion et recherche
    Bonjour,

    J'ai un petit problème basic mais qui me bloque

    Je recupère le numero d'une ligne dans un int "k" et je veux le convertir en string "temp".
    Ensuite, je veux chercher dans une autre string "histo" si elle contient le string "temp".

    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(j=0; j<i; j++){
    	k = j+1;
    	temp.erase();
    	temp += k;
    	if(histo.find(temp) != -1){
    		...monTraitement...
    	}
    }
    Le problème se situe à la conversion de k en string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    k = 1
    Après affectation : temp = 
    J'ai trouvé cette solution dans la FAQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <sstream>
     
    int main()
    {    
        // créer un flux de sortie
        std::ostringstream oss;
        // écrire un nombre dans le flux
        oss << 10;
        // récupérer une chaîne de caractères
        std::string result = oss.str();
    }
    mais le problème c'est que je suis sous visual 2005 et qu'il ne me reconnaît pas ostringstream .


    Quelqu'un aurait-il une idée s'il vous plaît???


    Merci


    Sachiel

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut
    Salut !

    La plupart du temp, lorsque je veux convertir un int en CString j'utilise la fonction Format() de CString.

    Ca donne un truc du genre :

    temp.Format("%d", k);

    En espérant ke ça peut t'aider.

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    Citation Envoyé par Sachiel31
    Bonjour,

    J'ai un petit problème basic mais qui me bloque
    ici c'est le forum c++, peut etre voulait tu dire "basique" ?

    Citation Envoyé par Sachiel31

    Je recupère le numero d'une ligne dans un int "k" et je veux le convertir en string "temp".
    Ensuite, je veux chercher dans une autre string "histo" si elle contient le string "temp".

    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(j=0; j<i; j++){
    	k = j+1;
    	temp.erase();
    	temp += k;
    	if(histo.find(temp) != -1){
    		...monTraitement...
    	}
    }
    Le problème se situe à la conversion de k en string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    k = 1
    Après affectation : temp = 
    J'ai trouvé cette solution dans la FAQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <sstream>
     
    int main()
    {    
        // créer un flux de sortie
        std::ostringstream oss;
        // écrire un nombre dans le flux
        oss << 10;
        // récupérer une chaîne de caractères
        std::string result = oss.str();
    }
    mais le problème c'est que je suis sous visual 2005 et qu'il ne me reconnaît pas ostringstream .
    ca c'est crieux, est tu sr de to ? n'as tu pas oublié un include, ou un std:: qqpart ?
    Citation Envoyé par Sachiel31

    Quelqu'un aurait-il une idée s'il vous plaît???


    Merci


    Sachiel
    vu qu'il ne s'agit que d'entier, c'est assez facile a faire "a la main".... par des opérations mathématiques tu isoles chacun des chiffres (par des divisions et des modulos), puis par une simple addition tu fais n corrspondance entre le caractére 'n' et le chiffre n (par exemple entre le chiffre 3 et le caractere '3').

  4. #4
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    @cedekasme :

    Merci beaucoup c'est tout à fait ce que je cherchais

  5. #5
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Et pour l'opération inverse, est-ce qu'il existe un équivalent???

  6. #6
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    je pense qu'il faudrait t'interesser au pourquoi le ostringstream n'est pas reconnu.
    la convertion dans les deux sens n'en sera que beaucoup plus facile !

    personnellement, j'utilise a foison ce genre de choses :
    http://c.developpez.com/faq/cpp/?pag...GS_convertform
    http://c.developpez.com/faq/cpp/?pag...NGS_convert_to

    je suis aussi avec VS2005, et ca marche tres bien !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut
    k = atoi(temp); // si ton projet n'est pas en unicode
    k = _ttoi(temp); // si il est en unicode

  8. #8
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Citation Envoyé par Rupella
    je pense qu'il faudrait t'interesser au pourquoi le ostringstream n'est pas reconnu.
    la convertion dans les deux sens n'en sera que beaucoup plus facile !


    je suis aussi avec VS2005, et ca marche tres bien !
    Pour utiliser std::istringstream et std::ostringstream, tu as un include particulier???


    atoi() marche mais c'est pas l'idéal vu que c'est plus du C.

  9. #9
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    je ne crois pas, j'utilise <sstream>

  10. #10
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    C'est bon ça marche

    C'est juste que j'avais oublié d'enlever les "//" devant mon include

    Faut vraiment que je me repose je crois

  11. #11
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut


    le dernier, c juste pour le plaisir...
    je suis en galère aussi sur un autre post, une horreur !


    [edit] ne pas utiliser -1 pour le find() mais std::string::npos !

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    @cedekasme :

    Merci beaucoup c'est tout à fait ce que je cherchais..
    Tu voulais pas convertir un int en std::string ?
    Dans ce cas-là ce qu'il te faut c'est boost::lexical_cast, c'est le plus pratique.

  13. #13
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par loufoque
    Tu voulais pas convertir un int en std::string ?
    Dans ce cas-là ce qu'il te faut c'est boost::lexical_cast, c'est le plus pratique.
    J'aimerais quand meme savoir pouquoi on s'acharne *systématiquement* à proposer la bibliotheque boost pour des choses que la STL permet de faire tout aussi bien...

    Je ne connais pas le fonctionnement interne de boost, mais je serais surpris que leur implémentation pour le lexical_cast soit fort proche de la solution "manuelle" qui consiste à passer par un (i/o)stringstream (selon le cas)...

    Je suis tout à fait d'accord que boost apporte des facilités qu'il est compliqué d'implémenter par soi-même, ou en tout cas des algorithmes mieux vérifiés (je penses à filesystem ou aux pointeurs intelligents), mais de manière générale, entre l'utilisation de la SL qui est incluse d'office avec trois lignes de code et l'installation préalable (et parfois problématique) de boost pour son compilo avant de devoir s'intéresser à la synthaxe d'une commande, je ne suis pas *vraiment* que pour un problème aussi simple le gain en terme de facilité soit réellement présent...

    Ce commentaire est évidemment à prendre dans le sens de "si boost n'a pas encore été installé pour le compilateur utilisé"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je ne connais pas le fonctionnement interne de boost, mais je serais surpris que leur implémentation pour le lexical_cast soit fort proche de la solution "manuelle" qui consiste à passer par un (i/o)stringstream (selon le cas)...
    En fait c'est bien plus compliqué que ça à cause de certaines optimisations et une meilleure gestion des flottants.
    Mais bon c'est plus ou moins ça oui, avec une gestion des erreurs par exception.

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

Discussions similaires

  1. [MySQL] Formulaire erreur Array to string conversion
    Par akamaru dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/12/2008, 11h02
  2. Réponses: 2
    Dernier message: 28/12/2007, 12h09
  3. [Debutant String Conversion] String a convertir
    Par septox dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2005, 12h12
  4. [String] Fonction de recherche de caractères numériques
    Par david71 dans le forum Général Java
    Réponses: 10
    Dernier message: 16/02/2005, 12h05
  5. [String] Conversion vers entier
    Par Javatator dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 19/08/2004, 15h59

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