Transformer tout séparateur par une espace

Problème

Vous disposez d’une chaîne de caractères dont chaque champ est délimité par un séparateur quelconque et voulez remplacer ces séparateurs par un caractère unique comme une espace.

Solution

Parcourir la chaîne de caractères en la recopiant sur elle-même et en remplaçant en même temps les séparateurs par des espaces.

Discussion

Le parcours peut se faire avec un simple pointeur et la recherche des séparateurs avec strcmp(). Le code est :


void 
replace_separator_with_space (char *str, const char *separator) 
{ 
  int l = strlen (separator); 
  char *p, *c; 
  for (p = str, c = str; p[0]; p++) 
    { 
      if (strncmp (separator, p, l)) 
        { 
          c[0] = p[0]; 
          c++; 
        } 
      else 
        { 
          c[0] = ' '; 
          c++; 
          p += l - 1; /* longueur moins un */
        } 
    } 
  c[0] = '\0'; 
}
 

Vous pouvez également parcourir la chaîne par blocs, en recherchant la fin de chaque bloc avec strstr() et en recopiant le bloc avec memmove().


void 
replace_separator_with_space_by_blocs (char *str, const char *separator) 
{ 
  int l = strlen (separator); 
  char *p, *q, *c; 
  q = str; 
  for (p = str, c = str; q; p = q + l) 
    { 
      q = strstr (p, separator); 
      if (q) 
        { 
          memmove (c, p, q - p); 
          c += q - p; 
          c[0] = ' '; 
          c++; 
        } 
      else 
        { 
          memmove (c, p, strlen...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Traiter les blancs au début et à la fin d'une chaîne
Suivant
Transformer une chaîne en minuscules ou en majuscules