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 :

erreur avec ma fonction ReplaceString


Sujet :

C++

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Billets dans le blog
    1
    Par défaut erreur avec ma fonction ReplaceString
    Hello les férus,

    Je suis en train de coder un geolocaliseur (pour faire simple) et je reçois mes valeurs de LONG et LAT en string du type 3,15535 . Problème c'est que pour faire des calculs avec je dois être en 3.15535 (, remplacé par .) (Et aussi être en double je sais).

    J’ai codé en brut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string trouver = ",";
    LON.replace(LON.find(trouver),trouver.length(),".");
    LAT.replace(LAT.find(trouver),trouver.length(),".");
    Et pas de problème j'arrive à faire ce que je veux faire. Mais ça ne fait pas très "propre" et j'aimerai en faire une fonction ReplaceString du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void ReplaceString(string chaine, string toreplace, string replaceby){
        cerr << chaine << endl;
        chaine.replace(chaine.find(toreplace), toreplace.length(), replaceby);
        cerr << chaine << endl;
    }
    int main(){
        ReplaceString(LON,",",".");
        ReplaceString(LAT,",",".");
        cerr << "long :" << LON << endl;
        cerr << "lat :" << LAT << endl;
     
    }
    Mes deux premier cerr me prouve que ma fonction marche mais mon 3eme me montre que rien ne se passe dans mon main (ma "," n'as par changé). Je me rends bien compte que ma fonction ne retourne rien mais je ne sais pas comment la modifier...


    A l'aide pls !!

    Merci,
    ICE

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    sinon ça s'apelle conversion et de string à double c'est std::stod.
    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.

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Billets dans le blog
    1
    Par défaut
    hey Bousk,

    Merci pour ta réponse ! EN effet j'avais vu trainer cette fonction sur le net mais je n'y ai rien compris (c'est toujours le cas !!)

    Apres avoir essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string LON = 3,5644
    double LO = stof(LON); // LO = 3
    J'y pige que dalle... un peu d'aide pls

    Merci encore,
    ICE

  4. #4
    Membre averti Avatar de Maghin
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Octobre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2014
    Messages : 29
    Par défaut
    Effectivement je viens de faire le test avec stof et il faut bien remplacer la virgule par un point avant la conversion :

    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
            auto input1 = string("1.23456");
            auto input2 = string("1,23456");
     
            auto output1 = stof(input1);
            auto output2 = stof(input2);
     
            cout << input1 << " convertie vers " << output1 << endl;
            cout << input2 << " convertie vers " << output2 << endl;
     
            return 0;
    }
    Ce code donne le résultat suivant chez moi :

    1.23456 convertie vers 1.23456
    1,23456 convertie vers 1

    Le problème dans ton code n'est pas lié à ton approche mais à une mauvaise utilisation de tes variables.
    Si tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Bad:
    void AdditionnerAetB(int a, int b, int resultat) 
    {
            resultat = a + b; // resultat est une copie de celui qui sera passé en paramètre
                             // il ne sera pas modifié
    }
    Les trois variables sont recopiée en mémoire puis les copie sont utilisés dans la fonction. Il faut soit utiliser un pointeur, soit une référence.
    Tu peux tenter de partir sur une signature de ce type (si vraiment tu ne veux pas de retour) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ReplaceString(string &chaine, string toreplace, string replaceby)
    Et encore mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ReplaceString(string &chaine, const string& toreplace, const string& replaceby)

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Billets dans le blog
    1
    Par défaut
    Mon ami Maghin !!!

    Merci pour les précisions et pour m'expliquer mon probleme de variables/pointeurs. EN faisant les modifs que tu as proposé, tout marche.

    Merci encore à tous !
    ( J'ADORE CE FORUM !! )

  6. #6
    Membre averti Avatar de Maghin
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Octobre 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2014
    Messages : 29
    Par défaut
    En l'occurrence là il s'agit d'une référence, mais c'est avec plaisir

  7. #7
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Le point ou la virgule est lié à la locale.
    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.

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

Discussions similaires

  1. Erreur avec la fonction Make .
    Par seboyoyo dans le forum Linux
    Réponses: 3
    Dernier message: 06/10/2007, 01h31
  2. [Formule]Erreur avec la fonction recherchev
    Par solorac dans le forum Excel
    Réponses: 4
    Dernier message: 19/04/2007, 17h09
  3. [XSLT] erreur avec les fonctions
    Par frouge dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 18/07/2006, 10h15
  4. [Mail] erreur avec utilisation fonction mail
    Par taka10 dans le forum Langage
    Réponses: 7
    Dernier message: 12/07/2006, 16h19
  5. erreur avec la fonction putfile() sur connexion FTP
    Par stefane1981 dans le forum C++
    Réponses: 2
    Dernier message: 23/09/2005, 09h13

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