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 :

[chaine de caractères]Remplacement de caractères spéciaux


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 102
    Points : 118
    Points
    118
    Par défaut [chaine de caractères]Remplacement de caractères spéciaux
    Bonjour,

    Je vous expose mon problème,

    J'ai une chaine de charactère contenant quelque chose comme ceci : "http%3A%2F%2Fwww.unsite.net%2Ftruc%2Fchose%2Fmachin+truc+chose.html"

    Je voudrais transformer les "%3A" en ":" et les "%2F" en "/" ainsi que les "+" en "%20" afin d'obtenir quelque chose de plus propre comme : "http://www.unsite.net/truc/chose/machin%20truc%20chose.html"

    J'ai éssayé avec des methodes traditionnelles de remplacement, mais sa ne fonctionne pas

    Petites précision, j'utilise MinGW et mon programme est en C

    Merci d'avance à tout ceux qui m'aiderons

    Cordialement,

    Benjamin

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par zeke the mouarfor
    J'ai éssayé avec des methodes traditionnelles de remplacement, mais sa ne fonctionne pas
    C'est à dire ? Montre nous le code, c'est peux être juste une erreur.

    Sinon le plus simple est de recopier la chaîne dans un nouveau tableau en vérifiant les caractères copiés.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 102
    Points : 118
    Points
    118
    Par défaut
    J'utilise un petit code trouvé ici même je crois bien :

    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
     
    char* str_replace (const char* txt, const char* Avant, const char* Apres)
    {
      const char* pos;           // Position d'une occurance de Avant dans txt
      char* TxtRetour;           // La chaine retournée
      size_t PosTxtRetour;       // Position du prochain caractère à écrire
                                 // dans TxtRetour
      size_t Long;               // Long d'une chaine à écrire dans TxtRetour
      size_t TailleAllouee;      // Taille allouée à TxtRetour
     
      // Cherche la première occurancce
      pos = strstr (txt,Avant);
     
      // Aucune occurance : renvoie simplement une copie de la chaine
      if (pos == NULL) return NULL;
     
      // Alloue une nouvelle chaine
      Long = (size_t)pos -(size_t)txt;
      TailleAllouee = Long +strlen(Apres)+1;
      TxtRetour = (char *)malloc(TailleAllouee);
      PosTxtRetour = 0;
     
      // Copie la première partie de la chaîne sans occurance
      strncpy (TxtRetour+PosTxtRetour,txt,Long); PosTxtRetour += Long;
      txt = pos+strlen(Avant);
     
      // Ajoute la chaîne de remplacement Apres
      Long = strlen(Apres);
      strncpy (TxtRetour+PosTxtRetour,Apres,Long); PosTxtRetour += Long;
     
      // Cherche la prochaine occurance
      pos = strstr (txt,Avant);
      while (pos != NULL)
      {
        // Agrandit la chaine
        Long = (size_t)pos -(size_t)txt;
        TailleAllouee += Long+strlen(Apres);
        TxtRetour = (char *)realloc(TxtRetour,TailleAllouee);
     
        // Copie ce qu'il y a entre la dernier occurance et la nouvelle
        strncpy (TxtRetour+PosTxtRetour,txt,Long); PosTxtRetour += Long;
     
        // Passe l'occurance
        txt = pos+strlen(Avant);
     
        // Ajoute la chaîne de remplacement
        Long = strlen(Apres);
        strncpy (TxtRetour+PosTxtRetour,Apres,Long); PosTxtRetour += Long;
     
        // Cherche la prochaine occurance
        pos = strstr (txt,Avant);
      }
     
      // Ajoute le reste de la chaîne (il reste au moins '\0')
      Long = strlen(txt)+1;
      TailleAllouee += Long;
      TxtRetour = (char*)realloc(TxtRetour,TailleAllouee);
      strncpy (TxtRetour+PosTxtRetour,txt,Long);
      return TxtRetour;
    }
    Voila

  4. #4
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Le code que tu nous donne te donne quoi comme resultat ?
    Une erreur? ou quelque chose mais qui n'est pas ce que tu souhaite ?
    Soit plus explcite

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par zeke the mouarfor
    J'utilise un petit code trouvé ici même je crois bien :
    ça fonctionne très bien chez moi :
    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
    #include <stdio.h>
     
    int main (void)
    {
      char *sn = NULL;
      char s[] = "http%3A%2F%2Fwww.unsite.net%2Ftruc%2Fchose%2Fmachin+truc+chose.html";
     
      printf("avant : %s\n", s);
     
    /* %3a -> : */
      sn = str_replace (s, "%3A", ":");
      strcpy (s, sn);
      free (sn), sn = NULL;
     
    /* %2F -> / */
      sn = str_replace (s, "%2F", "/");
      strcpy (s, sn);
      free (sn), sn = NULL;
     
    /* + -> %20 */
      sn = str_replace (s, "+", "%20");
     
      printf("apres : %s\n", sn);
      free (sn), sn = NULL;
      return 0;
    }
    Une nouvelle chaîne étant créée à chaque fois, il faut la recopier à la place de l'ancienne. Sauf pour la dernière car la taille de la chaîne augmente (on remplace 1 caractère par 3).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 102
    Points : 118
    Points
    118
    Par défaut
    Merci, je vous serais éternellement reconnaissant , j'oubliais simplement de remplacer la chaine d'origine

    Désolé de vous avoir déranger pour si peu et encore merci

    Cordialement,

    Benjamin

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2015, 14h29
  2. Remplacer des caractères spéciaux dans une chaine
    Par enzostar dans le forum Langage
    Réponses: 5
    Dernier message: 30/09/2012, 00h16
  3. Réponses: 21
    Dernier message: 24/05/2005, 22h01
  4. Remplacement de caractères spéciaux
    Par willowII dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 26/04/2005, 19h13
  5. [CR] Chercher et remplacer un caractère dans 1 chaine
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/09/2004, 17h42

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