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 :

Cherche comment remplacer un caractere dans une variable en c++


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Cherche comment remplacer un caractere dans une variable en c++
    Bonjour,
    Je cherche a modifier un caractere dans une variable,
    Je m'explique si la variable contient : l-ol-
    Je voudrais remplacer tout les - par tiret, par exemple.
    Pouvez vous m'aider s'il vous plait ? merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Si tu cherche à modifier le nom d'une variable à l'éxécution, c'est impossible.

    Si tu cherche à modifier le nom de la variable dans tout ton programme, ton EDI/editeur de texte doit te fournir un commande du genre "Find & Replace" ou des outils de refactorisation plus évolués.

    Si tu cherche à modifier la valeur d'une variable de type std::string, va voir du coté de std::string::replace et std::string::find

    Si tu cherche à modifier la valeur d'une variable de type char*, utilise plutot un std::string

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonsoir, merci de ta reponse j'ai trouver enfin presque...,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int EnleverExtension(char *lol[])
    {
    int i;
    for (i=0 ; lol[i]!=0 ; i++)
    {
    if ( lol[i]=='-' )
    lol[i] = "%055";
    }
    return lol;
    }
    voici ce que j'ai trouver mais le probleme c'est qu'il remplace bien les - mais par 5 et non %055 serait tu d'ou vient le probleme s'il te plait ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par SnT28 Voir le message
    Bonsoir, merci de ta reponse j'ai trouver enfin presque...,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int EnleverExtension(char *lol[])
    {
    int i;
    for (i=0 ; lol[i]!=0 ; i++)
    {
    if ( lol[i]=='-' )
    lol[i] = "%055";
    }
    return lol;
    }
    voici ce que j'ai trouver mais le probleme c'est qu'il remplace bien les - mais par 5 et non %055 serait tu d'ou vient le probleme s'il te plait ?
    PS : Désolé ce n'ai pas la variable mais ce qu'elle contient que je voudrait modifier ( mauvaise expression de ma part )

  5. #5
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Points : 311
    Points
    311
    Par défaut
    C'est dangereux ce que tu fais, tu veux remplacer une seule cellule de ton tableau de caractère par plusieurs caractères. Dans le meilleur des cas effectivement il remplace un seul caractère, dans le pire des cas comme il y a trop de caractères il va écrire n'importe ou en mémoire. Il te faut donc redimensionner ta chaîne de caractères car remplacer une lettre par plusieurs revient à agrandir ta chaine de caractère .
    A ta place je passerai par un string, qui te permet de localiser un caractère spécifique, de le supprimer et d'insérer une chaine de caractère à la place.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Le code que tu nous présente est du code C buggé.
    En C++, il faut utiliser std::string et les algorithmes de la STL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string EnleverExtension(std::string  param_)
    {
        std::replace(param_.begin(),param_.end(),'-','?');
        return param_;
    }

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour, tout d'abord merci a vous deux cependant lors de l'ajout de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string EnleverExtension(std::string  param_)
    {
        std::replace(param_.begin(),param_.end(),'-','?');
        return param_;
    }
    la compilation me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s_user.c: At top level:
    s_user.c:1203: erreur: erreur de syntaxe avant un élément lexical « : »
    ligne 1203 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string EnleverExtension(std::string  param_)

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par SnT28 Voir le message
    Bonjour, tout d'abord merci a vous deux cependant lors de l'ajout de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string EnleverExtension(std::string  param_)
    {
        std::replace(param_.begin(),param_.end(),'-','?');
        return param_;
    }
    la compilation me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s_user.c: At top level:
    s_user.c:1203: erreur: erreur de syntaxe avant un élément lexical « : »
    ligne 1203 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string EnleverExtension(std::string  param_)
    As-tu bien pensé à inclure string ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    oui,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <string.h>
     
    std::string EnleverExtension(std::string  param_)
    {
        std::replace(param_.begin(),param_.end(),'-','?');
        return param_;
    }
    string.h :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    /*  AFCTools.h  $ 19/05/97 FR MT $  */
    #ifndef AFC_STRING_H
    #define AFC_STRING_H
     
     
    #include <malloc.h>
    #include <ctype.h>
    #include <stdio.h>
    #include <string.h>
     
    #ifndef MINGW
    	#include <fnmatch.h>
    #endif
     
    #include <math.h>
    #include <stdarg.h>
    #include <stdlib.h>
    #include <errno.h>
     
    #ifdef MINGW
    	#include <fcntl.h>
    #endif
     
    #ifdef __cplusplus
    extern "C" {
    #endif /* __cplusplus */
     
    #define ALL (~0L)
     
    /* Defined for afc_string_hash() */
    #define afc_tools_internal_mix(a,b,c) \
    { \
      a -= b; a -= c; a ^= (c>>13); \
      b -= c; b -= a; b ^= (a<<8); \
      c -= a; c -= b; c ^= (b>>13); \
      a -= b; a -= c; a ^= (c>>12);  \
      b -= c; b -= a; b ^= (a<<16); \
      c -= a; c -= b; c ^= (b>>5); \
      a -= b; a -= c; a ^= (c>>3);  \
      b -= c; b -= a; b ^= (a<<10); \
      c -= a; c -= b; c ^= (b>>15); \
    }
     
    #define afc_string_delete(str)	if ( str ) { _afc_string_delete ( str ); str = NULL; }
     
    /* Function Prototypes */
     
    char *  afc_string_new(unsigned long numchars);
    char *  _afc_string_delete( char * location);
    char *  afc_string_copy( char * deststr,  const char * sourcestr, unsigned long len);
    unsigned long   afc_string_max( const char * str);
    unsigned long   afc_string_len( const char * str);
    char *  afc_string_mid( char * dest,  const char * src, unsigned long fromchar, unsigned long numchars);
    // #define afc_string_comp(s1,s2,chars)  strncmp ( s1, s2, chars )
    signed long afc_string_comp( const char * s1, const char * s2, long chars);
    char *  afc_string_upper( char * str);
    char * afc_string_lower ( char * s );
    char * afc_string_trim (  char * s );
    char * afc_string_instr (  const char * str,  const char * match, unsigned long startpos );
    char * afc_string_left (  char * dest,  const char * src, long len );
    char * afc_string_right (  char * dest,  const char * src, long len );
    unsigned long afc_string_reset_len (  const char * str );
    int afc_string_pattern_match (  const char * str,  const char * pattern, short nocase );
    int afc_string_radix (  char * dest, long n, int radix );
    unsigned long int afc_string_hash ( const register unsigned char * k, register unsigned long int turbolence );
    char * afc_string_dup (  const char * );
    char * afc_string_make ( char * dest, const char * fmt, ... );
    char * afc_string_fget (  char * dest, FILE * fh );
    char * afc_string_add (  char * dest,  const char * source, unsigned long len );
    char * afc_string_clear (  char * dest );
    char * afc_string_temp ( const char * path );
    char * afc_string_resize_copy ( char * * dest, const char * str );
    char * afc_string_resize_add ( char * * dest, const char * str );
    char * afc_string_dirname ( const char * path );
    char * afc_string_basename ( const char * path );
     
    #ifdef __cplusplus
    }
    #endif /* __cplusplus */
    #endif

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    #include <string>, pas <string.h>
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par SnT28 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s_user.c: At top level:
    s_user.c:1203: erreur: erreur de syntaxe avant un élément lexical « : »
    s_user.c sera compilé en C et non en C++, d'où tout un tas d'erreur incompréhensible.
    Donc, si tu veux le faire en C++ :
    => s_user.cpp + std::string + std::replace
    Si tu veux le faire en C :
    => dis le on redirigera la question vers le forum dédié

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour, effectivement je voudrais le faire en C alors

    andnicam : C'est dangereux ce que tu fais, tu veux remplacer une seule cellule de ton tableau de caractère par plusieurs caractères. Dans le meilleur des cas effectivement il remplace un seul caractère, dans le pire des cas comme il y a trop de caractères il va écrire n'importe ou en mémoire. Il te faut donc redimensionner ta chaîne de caractères car remplacer une lettre par plusieurs revient à agrandir ta chaine de caractère .
    A ta place je passerai par un string, qui te permet de localiser un caractère spécifique, de le supprimer et d'insérer une chaine de caractère à la place.
    Pourriez vous m'expliquer comment proceder a cette redimension de chaine s'il vous plait ?

Discussions similaires

  1. Comment remplacer un mot dans une chaines de caractere?
    Par lakhdharani dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/02/2009, 11h58
  2. Réponses: 2
    Dernier message: 19/01/2006, 21h59
  3. Réponses: 2
    Dernier message: 12/01/2006, 08h34
  4. Remplacer 1 caractère dans 1 variable en KornShell
    Par chickenhuchette dans le forum Linux
    Réponses: 5
    Dernier message: 31/12/2005, 11h24

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