Comment diviser les chaînes basées sur le délimiteur en C

Comment diviser les chaînes basées sur le délimiteur en C
String est le tableau de caractères et le délimiteur peut être n'importe quel tableau de caractères ou de tout caractère spécial, qui peut être utilisé pour diviser la chaîne en plusieurs sous-détraitements. Delimiter fera partie de la chaîne. Nous allons passer par l'exemple d'implémentation et implémenterons également un morceau de code C pour diviser la chaîne.

Chaîne: La chaîne est un tableau de caractères. Quelques exemples de chaînes sont:

«New Delhi est capitale de l'Inde»
"Bob étudie à l'Université de Stanford"

Délimiteur: Tout caractère ou ensemble de caractères peut être considéré comme délimiteur. Si une chaîne doit être divisée en fonction de Demiter, alors Delimiter doit faire partie de la chaîne ou bien la chaîne complète sera la chaîne de sortie.

Les exemples de délimiter couramment utilisés sont: «« (espace) ,, (virgule), «\ n» (nouvelle ligne) et bien d'autres.

Fissure de la chaîne en fonction de Demiter:

Considérons un exemple de chaîne comme «Fox vit dans Woods» et Delimiter comme «« (espace), puis la chaîne se divisera en plusieurs cordes. Plusieurs cordes après la scission seront «Fox» «Lives» «dans» «Woods».

Alors maintenant, nous sommes clairs sur le concept de séparation et nous sommes également clairs maintenant sur la définition de la chaîne et du délimiteur. Procédons-nous à l'exploration de la mise en œuvre du fractionnement en C.

Fonction C standard pour la division basée sur le délimiteur:

C fournit le strtok () fonction, qui peut être utilisée pour diviser la chaîne en jetons en fonction du délimiteur sélectionné.

Prototype de fonction:

char * strtok (char * restreint Str, const char * restreint délimiter));

En-tête à inclure:

#inclure

C Programme pour diviser la chaîne en fonction de Delimiter à l'aide de strtok ():

#inclure
#inclure
int main()

Char String [] = "Bob étudie à l'Université de Stanford";
char * Delim = "";
Count non signé = 0;
/ * Le premier appel à strtok doit être effectué avec String et Delimiter comme premier et deuxième paramètre * /
token char * = strtok (String, Delim);
Count ++;
/ * Les appels consécutifs vers le strtok doivent être avec le premier paramètre en tant que paramètre null et deuxième en tant que délimiteur
* * La valeur de retour du strtok sera la chaîne divisée basée sur Demiter * /
Pendant (jeton != Null)

printf ("Token Non. % d:% s \ n ", count, jeton);
Token = strtok (null, Delim);
Count ++;

retour 0;

C instantané du programme C:

Sortie du programme:

Maintenant, discutons de notre propre implémentation pour diviser une chaîne basée sur Demiter sans utiliser la fonction C standard (strtok ()).

Nous devons rechercher la présence de délimiteur dans la chaîne et pouvons renvoyer l'adresse du premier caractère du jeton de chaîne juste avant le délimiteur.

La fonction C pour rechercher le jeton basé sur le délimiteur peut être implémentée comme ci-dessous:

char * search_token (chaîne de char *, char * délire)

Char statique * rappelez-vous = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (Delim == null)
retourner null;
if ((string == null) && (remember == null)))
retourner null;
if (string == null)
string = reound;
string_length = strlen (string) + 1;
pour (i = 0; i
if (String [i] == Delim [0])

search_hit = 1;
casser;


if (search_hit != 1)

N'oubliez pas = null;
retour de la chaîne;

String [i] = '\ 0';
if ((String + i + 1) != Null)
rappelez-vous = chaîne + i + 1;
autre
N'oubliez pas = null;
retour de la chaîne;

Ci-dessus est la fonction de recherche pour rechercher le jeton, une fois que le jeton est trouvé un caractère avant que le jeton puisse être copié et récupéré à partir du tampon de chaîne source.

Le programme C complet avec notre implémentation ressemblera ci-dessous:

#inclure
#inclure
char * search_token (chaîne de char *, char * délire)

Char statique * rappelez-vous = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (Delim == null)
retourner null;
if ((string == null) && (remember == null)))
retourner null;
if (string == null)
string = reound;
string_length = strlen (string) + 1;
pour (i = 0; i
if (String [i] == Delim [0])

search_hit = 1;
casser;


if (search_hit != 1)

N'oubliez pas = null;
retour de la chaîne;

String [i] = '\ 0';
if ((String + i + 1) != Null)
rappelez-vous = chaîne + i + 1;
autre
N'oubliez pas = null;
retour de la chaîne;

int main()

Char String [] = "Bob étudie à l'Université de Stanford";
char * Delim = "";
Count non signé = 0;
token char *;
printf ("Full String =% s \ n", string);
/ * Le premier appel à search_toekn doit être effectué avec String et Demiter comme premier et deuxième paramètre * /
token = search_token (String, Delim);
// printf ("Token Non. % d:% s \ n ", count, jeton);
Count ++;
/ * Les appels consécutifs vers le strtok doivent être avec le premier paramètre en tant que paramètre null et deuxième en tant que délimiteur
* * La valeur de retour du strtok sera la chaîne divisée basée sur Demiter * /
Pendant (jeton != Null)

printf ("Token Non. % d:% s \ n ", count, jeton);
token = search_token (null, délim);
Count ++;

retour 0;

Sortie du programme ci-dessus avec le même ensemble d'entrée que de la fonction C Strtok standard:

bash-4.2 $ ./un.dehors
String complet = Bob étudie à l'Université de Stanford
Jeton Non. 1: Bob
Jeton Non. 2: est
Jeton Non. 3: étudier
Jeton Non. 4:
Jeton Non. 5: Stanford
Jeton Non. 6: Université
bash-4.2 $

Instantanés du programme complet:

Instantané de sortie:

Conclusion:

Jusqu'à présent, nous avons discuté du fractionnement de la chaîne en fonction de la délimitrice. Il existe déjà des moyens de bibliothèque disponibles pour le faire. La fonction de bibliothèque qui peut être utilisée pour diviser la chaîne basée sur Demiter est strtok. Nous avons pris un exemple de cas d'utilisation pour comprendre la fonction de bibliothèque strtok. Nous avons également écrit un exemple de programme pour comprendre l'utilisation de la fonction de bibliothèque.

Deuxième partie, nous avons implémenté notre propre méthode de division de la chaîne en fonction de la délimiteur. Nous avons écrit une fonction qui est comme la fonction c strtok. L'explication du fonctionnement de la fonction personnalisée a été fournie et démontrée à l'aide de la même fonction principale qui a été prise en cas de fonction de bibliothèque C. L'exemple de sortie du programme est également fourni avec l'exemple de programme.

Nous avons également parcouru le concept de fractionnement de cordes basé sur Demiter, juste pour résumer tout caractère qui est de rechercher dans la chaîne principale peut être considéré comme un jeton et peut être recherché jusqu'à ce que le jeton soit rencontré. Une fois le jeton trouvé, la chaîne avant le retour du jeton à la fonction de l'appelant.