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 :

Comment enlever un mot d'une chaine?


Sujet :

C

  1. #1
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut Comment enlever un mot d'une chaine?
    Bonjour, j'ai une chaine de caractère :
    Salut\comment\sava\surplu
    et j'aimerais supprimer le mot surplu de la chaine ainsi que l'anti-slash :
    Salut\comment\sava
    mais je ne vois pas quel fonctions utiliser.
    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    C'est assez simple: strstr() pour reperer la sous-chaine, et memmove() pour l'ecraser.

  3. #3
    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 benjiprog
    et j'aimerais supprimer le mot surplu de la chaine ainsi que l'anti-slash :
    mais je ne vois pas quel fonctions utiliser.
    Un extrait des pages sources C qui ne devrait plus tarder à arriver :
    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 <string.h>
     
    char *RemplacerFragment (char *source, char *vieux, char *nouveau)
    {
      char *original = source;
      char temp[256];
      int ancienne_long = strlen (vieux);
      int i, j, k, place = -1;
      for (i = 0; source[i] && (place == -1); ++i)
        for (j = i, k = 0; source[j] == vieux[k]; j++, k++)
          if (!vieux[k+1])
            place = i;
      if (place != -1)
      {
        for (j=0; j<place; j++)
          temp[j] = source[j];
        for (i=0; nouveau[i]; i++, j++)
          temp[j] = nouveau[i];
        for (k = place + ancienne_long; source[k]; k++, j++)
          temp[j] = source[k];
        temp[j] = 0;
        for (i=0; source[i] = temp[i]; i++)
          ;
      }
      return original;
    }
    Et tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char s[] = "Salut\comment\sava\surplu"
     
    RemplacerFragment (s, "sava\", "")
    Ici, tu ne remplace que la première occurance. Si tu veux remplacer toutes les occurences, j'ai un autre code mais plus long

  4. #4
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    char *c = strrchr(s, '\\' );
    *c = 0;

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Mayti4
    char *c = strrchr(s, '\\' );
    *c = 0;
    Là, tu supprimmes la fin... Ce n'est pas la demande originale...

    http://www.developpez.net/forums/sho...26&postcount=1

    Respecter le cahier des charges fait partie du métier de programmeur.

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ta fonction est horriblement compliquee:
    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
     
    int str_rem(char *s, char const *srem)
    {
      int n = 0;
      char *p;
     
      if (s && srem)
      {
        size_t const len = strlen(srem);
     
        while((p = strstr(s, srem)) != NULL)
        {
          memmove(p, p + len, strlen(p + len) + 1);
          n++;
        }
      }
     
      return n;
    }
    Un petit test:
    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
     
    #include <stdio.h>
     
    #include "str_rem.h"
     
    int main(void)
    {
      char s1[] = "This strong is a strong string.strong";
      int n = str_rem(s1, "strong");
     
      if(n != 3)
      {
        fprintf(stderr, "Error: only %d occurences found - expecting 3.\n", n);
      }
      puts(s1);
     
      return 0;
    }
    donne bien:
    On peut eventuellement nettoyer les espaces en trop, dans mon exemple.

  7. #7
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Je supprime '\surplu', donc bien ce qu'il veut.

    Ou est le problème ?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Mayti4
    Je supprime '\surplu', donc bien ce qu'il veut.

    Ou est le problème ?


    J'avais conclus à un code plus général, surtout en lisant la réponse de Dazumba...

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    J'avais conclus à un code plus général, surtout en lisant la réponse de Dazumba...
    Vu qu'il y a deux chances sur trois pour que la prochaine question du PO soit 'et pour enlever sava?', autant y aller franco, non?

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/04/2011, 22h56
  2. [AC-2000] Comment filtrer des mots dans une chaine de caractères
    Par bionet dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 21/07/2009, 18h16
  3. 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
  4. comment highlighter un mot dans une chaine ...
    Par valou2006 dans le forum Langage
    Réponses: 9
    Dernier message: 08/03/2006, 13h54

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