Bonjour,
Dans le cours sur le langage C, au TP sur l’entête <string.h>
, j’ai réalisé la fonction zstrtok
suivante pour l’exercice sur la mise en œuvre de strtok
.
char *zstrtok(char *restrict string, const char *const restrict DELIMITERS)
{
static char *current_substring;
if (string == NULL && current_substring == NULL)
return NULL;
if (string != NULL)
current_substring = string;
else
string = current_substring;
while (*current_substring != '\0')
{
size_t j = 0;
while (DELIMITERS[j] != '\0')
{
if (*current_substring == DELIMITERS[j])
{
string++;
current_substring++;
j = 0;
continue;
}
j++;
}
break;
}
if (*current_substring == '\0')
return NULL;
while (*current_substring != '\0')
{
size_t j = 0;
while (DELIMITERS[j] != '\0')
{
if (*current_substring == DELIMITERS[j])
{
*current_substring = '\0';
current_substring++;
return string;
}
j++;
}
current_substring++;
}
return string;
}
Elle semble fonctionner correctement, en tout cas elle donne le résultat attendu avec l’exemple du cours.
Je voudrais simplement avoir vos avis sur cette réalisation. J’ai évité l’utilisation de goto
alors qu’elle est suggérée dans l’énoncé, mais je ne suis pas sûr que son remplacement par des continue
et break
soit réellement plus lisible (et cela ressemble peut-être à un goto
déguisé…). Par ailleurs, je ne suis pas sûr que les restrict
soient utiles ici, étant donné que les types sur lesquels ces mots-clés sont appliqués sont, il me semble, incompatibles.
+0
-0