Couper une chaîne en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction personnalisée pour couper une chaîne en C
  2. Utiliser une autre fonction personnalisée pour découper une chaîne en C
Couper une chaîne en C

Cet article explique plusieurs méthodes pour couper une chaîne en C.

Utiliser la fonction personnalisée pour couper une chaîne en C

Les fonctions de découpage de chaînes ne font pas partie des utilitaires de chaîne standard de la bibliothèque C ou ne sont pas fournies par les fonctions compatibles POSIX, il faut donc implémenter la fonctionnalité elle-même. Dans cet exemple, nous implémentons la fonction nommée trimString qui prend un seul argument de pointeur char et renvoie le pointeur vers la chaîne tronquée. Notez que nous, en tant qu’appelant, sommes responsables de transmettre la chaîne qui peut être modifiée. Dans ce cas, nous avons utilisé strdup pour dupliquer str1, et lorsque la chaîne est utilisée, elle doit être libérée en utilisant l’appel free.

La fonction trimString est implémentée de sorte qu’elle itère sur la chaîne caractère par caractère, et tandis que celle donnée est un espace, elle incrémente le pointeur de un. En bref, cette boucle while déplace le pointeur du pointeur char vers le premier caractère non espace, en coupant le préfixe de la chaîne. Ensuite, le pointeur incrémenté est vérifié si la valeur est égale à null, ce qui implique que la chaîne donnée ne contenait aucun caractère non espace; ainsi nous retournons la valeur nulle pour désigner le cas d’erreur. La boucle while Conséquent supprime les espaces à la fin de la chaîne en déplaçant le pointeur vers la fin de la chaîne en arrière un par un. Une fois que la boucle rencontre le caractère non espace, elle s’arrête et l’instruction suivante met le caractère \0 à la fin de celui-ci.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *trimString(char *str) {
  char *end;

  while (isspace((unsigned char)*str)) str++;

  if (*str == 0) return str;

  end = str + strlen(str) - 1;
  while (end > str && isspace((unsigned char)*end)) end--;

  end[1] = '\0';

  return str;
}

int main(void) {
  const char *str1 = "  temporary string     ";

  printf("%s\n", str1);

  char *tmp = strdup(str1);
  printf("%s\n", trimString(tmp));

  free(tmp);
  exit(EXIT_SUCCESS);
}

Production:

  temporary string     
temporary string

Utiliser une autre fonction personnalisée pour découper une chaîne en C

Semblable à la fonction de découpage précédente, trimString2 est implémenté pour supprimer les espaces des deux côtés de la chaîne. La première boucle while calcule le nombre d’espaces à la fin de la chaîne, et la seconde boucle déplace le pointeur vers le premier caractère non espace. À la fin des instructions de boucle, len contient le nombre de caractères dans la chaîne tronquée générée par la fonction strndup. Notez que le pointeur renvoyé par la fonction strndup doit être libre par l’appelant pour éviter les fuites de mémoire.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *trimString2(char *str) {
  size_t len = strlen(str);

  while (isspace(str[len - 1])) --len;
  while (*str && isspace(*str)) ++str, --len;

  return strndup(str, len);
}

int main(void) {
  char *str2 = "       temporary string  ";

  printf("%s\n", str2);

  char *s = trimString2(str2);
  printf("%s\n", s);

  free(s);
  exit(EXIT_SUCCESS);
}

Production:

     temporary string  
temporary string
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C String