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 :

fonction replace qui plante


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    débutant c++
    Inscrit en
    Août 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : débutant c++

    Informations forums :
    Inscription : Août 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut fonction replace qui plante
    Bonjour,

    La fonction string::replace (très pratique) me pose problème lorsque je tente de remplacer \ par /. (str1 = "\\" et str2 = "/")
    Dans ce cas, j'ai systématiquement un plantage.

    existe-t-il une astuce (que je n'aurai pas saisie) permettant d'y arriver avec replace ou bien faut-il que je refasse une fonction qui ferait le même boulot ?

    Merci à vous.

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Pourquoi, le remplacement d'un caractère poserait un problème?
    N'es-tu pas en train d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str = "hello\n";
    str.replace( "\\" , "/" );
    Forcément ne fonctionne pas car le caractère \ n'est pas dans str (car \n est un unique caractère)

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Désolé ma boule de crystal vient d'imploser.
    string::replace fonctionne parfaitement bien.
    Mais vu qu'on n'a absolument aucune de ce que tu essayes de faire ni par quel moyen, impossible de deviner ce que tu fais mal..
    Mais cette fonction n'en est pas la cause, sauf à vraiment mal l'utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str = "hello\n";
    str.replace( "\\" , "/" );
    Ne fonctionne pas surtout parce que ça compile pas, ça ne correspond à aucune surcharge de std::string::replace.
    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.

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    mea culpa

  5. #5
    Membre à l'essai
    Homme Profil pro
    débutant c++
    Inscrit en
    Août 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : débutant c++

    Informations forums :
    Inscription : Août 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre patience.

    Désolé, mais je ne retrouve plus la forme exacte de ce qui plantait.
    Cela plantait avec "run" mais fonctionnait correctement en debug ("F8").
    j'ai tenté quelque chose du genre : str.replace(str.find("\\", 1, "/")
    mais oublions cela.

    En fait je tente ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string str = "D:\Chemin";
    str.replace("\\", "/");
    pour obtenir ceci :
    Mais maintenant, j'ai effectivement un problème de compilation avec une vingtaine de références à basic_string.h que mon niveau ne permet pas encore de déchiffrer.

    Je suis de retour :

    OK j'ai retrouvé ce qui passe à la compilation, mais plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     string str = "D:\Chemin";
    std::string str2 ("\\");
    // str.replace(2,0, "/"); // OK
    str.replace(str.find("\\"),0, "/"); // NOK
    std::cout << str << '\n';
    Et voilà le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Hello world!
    terminate called after throwing an instance of 'std::out_of_range'
    what(): basic_string::replace
     
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.
     
    Process returned 3 (0x3) execution time : 2.394 s
    Press any key to continue.
    visiblement, j'ai bien une erreur de manipulation de la fonction replace, mais je ne vois pas comment je peux contourner le PB.

    Je n'exclus surtout pas faire de fausses manipes, c'est pour cela que je demande de l'aide.

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Et en lisant les warnings ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string str = "D:\Chemin"; // 'C'*: caractère de séquence d'échappement non reconnu
    '\' n'existe pas dans ta chaine -> str.find() retourne str.end() -> str.replace() throw.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string str = "D:\\Chemin";
    str.replace(str.find('\\'), 1, "/");

  7. #7
    Membre à l'essai
    Homme Profil pro
    débutant c++
    Inscrit en
    Août 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : débutant c++

    Informations forums :
    Inscription : Août 2015
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Et en lisant les warnings ?
    Effectivement, mais je ne suis pas encore familiarisé avec tous les messages retournés, j'y ferais plus attention dorénavant.

    '\' n'existe pas dans ta chaine -> str.find() retourne str.end() -> str.replace() throw.
    Donc si je comprends bien, lorsque je reçoit un chemin complet de la part de params[0] et que je l'affiche, (D:\chemin), il est en réalité D:\\chemin ?

    Autre question : est-il possible que params[0], me donne des fois "D:\\chemin" et d'autres "D:/chemin" ?

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

Discussions similaires

  1. Fonction Replace qui ne marche pas.
    Par guismoman60 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/01/2015, 18h59
  2. Fonction .replace qui ne fonctionne pas.
    Par Rominou777 dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 09/02/2012, 19h22
  3. [WD14] Fonction EmailLitPremier qui plante.
    Par taipan666 dans le forum WinDev
    Réponses: 9
    Dernier message: 06/12/2010, 20h43
  4. [GD] fonction createimagefromjpeg qui plante mon site
    Par dimainfo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 13/07/2010, 13h10
  5. Réponses: 20
    Dernier message: 06/05/2010, 12h32

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