Vérifiez si la chaîne contient une sous-chaîne en C
-
Utilisez la fonction
strstr
pour vérifier si une chaîne contient une sous-chaîne en C -
Utilisez la fonction
strcasestr
pour vérifier si une chaîne contient une sous-chaîne -
Utilisez la fonction
strncpy
pour copier une sous-chaîne

Cet article explique plusieurs méthodes permettant de vérifier si une chaîne de caractères contient une sous-chaîne donnée en C.
Utilisez la fonction strstr
pour vérifier si une chaîne contient une sous-chaîne en C
La fonction strstr
fait partie des facilités de chaînes de la bibliothèque standard du C, et elle est définie dans l’en-tête <string.h>
. La fonction prend deux arguments de pointeur char
, le premier indiquant la chaîne à rechercher et l’autre indiquant la chaîne à rechercher. Elle trouve la première adresse de départ de la sous-chaîne donnée et renvoie le pointeur correspondant à char
. Si la sous-chaîne n’est pas trouvée dans la première chaîne d’arguments, le pointeur NULL est renvoyé.
cCopy#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *tmp = "This string literal is arbitrary";
int main(int argc, char *argv[]) {
char *ret;
ret = strstr(tmp, "literal");
if (ret)
printf("found substring at address %p\n", ret);
else
printf("no substring found!\n");
exit(EXIT_SUCCESS);
}
Production :
textCopyfound substring at address 0x55edd2ecc014
Utilisez la fonction strcasestr
pour vérifier si une chaîne contient une sous-chaîne
strcasestr
ne fait pas partie des fonctionnalités standard de la bibliothèque, mais il est implémenté comme une extension dans la bibliothèque C de GNU, qui peut être indiquée avec la définition de la macro _GNU_SOURCE
. Une fois définie, nous pouvons appeler la fonction strcasestr
pour trouver la première occurrence de la sous-chaîne donnée. Mais attention, cette fonction ignore le cas des deux chaînes de caractères.
cCopy#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *tmp = "This string literal is arbitrary";
int main(int argc, char *argv[]) {
char *ret;
ret = strcasestr(tmp, "LITERAL");
if (ret)
printf("found substring at address %p\n", ret);
else
printf("no substring found!\n");
exit(EXIT_SUCCESS);
}
Production :
textCopyfound substring at address 0x55edd2ecc014
Utilisez la fonction strncpy
pour copier une sous-chaîne
On peut aussi copier la sous-chaîne donnée dans un nouveau tampon en utilisant la fonction strncpy
. Il faut trois arguments, dont le premier est le pointeur de destination char
où la sous-chaîne copiée sera stockée. Le deuxième argument est la chaîne source, et le dernier argument indique le premier nombre d’octets à copier au maximum. Notez que si l’octet nul n’est pas trouvé dans les premiers octets de la chaîne source, la chaîne de destination ne sera pas terminée par un zéro.
cCopy#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char *tmp = "This string literal is arbitrary";
int main(int argc, char *argv[]) {
char *str = malloc(strlen(tmp));
printf("%s\n", strncpy(str, tmp, 4));
printf("%s\n", strncpy(str, tmp + 5, 10));
free(str);
exit(EXIT_SUCCESS);
}
Production :
textCopyThis
string lit
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