Tronquer la chaîne en C

Jinku Hu 12 octobre 2023
Tronquer la chaîne en C

Cet article présentera plusieurs méthodes sur la façon de tronquer une chaîne en C.

Utiliser la fonction personnalisée avec l’arithmétique du pointeur pour tronquer la chaîne

Puisque les chaînes en C ne sont que les tableaux de caractères terminés par l’octet nul - \0, nous pouvons implémenter une fonction personnalisée qui déplace le pointeur actuel au début de la chaîne du nombre de places donné et renvoie une nouvelle valeur de pointeur.

Notez cependant qu’il y a deux problèmes; le premier est que nous devons avoir la possibilité de tronquer la chaîne donnée de gauche ou de droite et le second est que déplacer le pointeur ne suffit pas du côté droit de la chaîne car l’octet nul doit être inséré pour indiquer la fin. Ainsi, nous définissons la fonction truncString qui prend la chaîne et plusieurs caractères à tronquer de la chaîne. Le nombre peut être négatif, indiquant le côté duquel retirer le nombre donné de caractères. Ensuite, nous récupérons la longueur de la chaîne à l’aide de la fonction strlen, ce qui implique que l’utilisateur est responsable de la transmission de la chaîne valide. Ensuite, nous comparons la longueur avec le nombre de caractères à tronquer puis passons à la manipulation du pointeur.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *truncString(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str = str + pos;
    else
      str[len + pos] = 0;
  }

  return str;
}

int main(void) {
  char *str1 = "the string to be truncated";

  printf("%s\n", str1);
  printf("%s \n", truncString(strdupa(str1), 4));
  printf("%s \n", truncString(strdupa(str1), -4));

  exit(EXIT_SUCCESS);
}

Production:

the string to be truncated
string to be truncated
the string to be trunc

Nous attribuons simplement la valeur 0 à la position du caractère calculée en soustrayant la longueur de la chaîne et le nombre passé. Ainsi, nous avons déplacé la fin de la chaîne, et l’impression de sa valeur peut être faite avec l’ancien pointeur.

Alternativement, nous pouvons implémenter la fonction similaire truncString2 avec le même prototype mais tronque la chaîne au nombre de caractères passés comme deuxième argument. Le signe du nombre indique le côté à partir duquel former la nouvelle chaîne, à savoir, l’entier positif désigne le côté gauche et le côté négatif - le contraire.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *truncString2(char *str, int pos) {
  size_t len = strlen(str);

  if (len > abs(pos)) {
    if (pos > 0)
      str[pos] = 0;
    else
      str = &str[len] + pos;
  } else {
    return (char *)NULL;
  }

  return str;
}

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

  printf("%s\n", str2);
  printf("%s \n", truncString2(strdupa(str2), 6));
  printf("%s \n", truncString2(strdupa(str2), -6));

  exit(EXIT_SUCCESS);
}

Production:

the string to be truncated
string to be truncated
the string to be trunc
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