Couper une chaîne en C
- Utiliser la fonction personnalisée pour couper une chaîne en C
- Utiliser une autre fonction personnalisée pour dé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
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