Aléatoire une chaîne en C

J’essaie de générer des permutations aléatoires d’une chaîne fixe de 80 caractères en C. À ma grande consternation, le système sur lequel je travaille manque de strfry (). Quel est le meilleur moyen pour moi de générer une permutation aléatoire de cette chaîne? Comme cela sera bouclé sur env. 100 000 fois, la performance est un problème.

Il suffit d’utiliser l’implémentation Open Source GLIBC, telle que trouvée par Google Code .

char * strfry (char *ssortingng) { static int init; static struct random_data rdata; size_t len, i; if (!init) { static int state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; rdata.state = NULL; __initstate_r (time ((time_t *) NULL), state, 8, &rdata); init = 1; } len = strlen (ssortingng); for (i = 0; i < len; ++i) { int32_t j; char c; __random_r (&rdata, &j); j %= len; c = string[i]; string[i] = string[j]; string[j] = c; } return string; } 

Vous voudrez peut-être remplacer les types de données spécifiques à GLIBC par un type plus générique.

Ce code utilise le shuffle Fisher-Yates qui est en fait assez facile à mettre en œuvre par vous-même et très efficace.

créez un tableau de 80 lignes, insérez un caractère et un nombre aléatoire dans chaque ligne du tableau, puis sortingez le tableau sur les nombres aléatoires.

Reconstruire une chaîne à partir d’un tableau sortingé.

void gcry_randomize (caractère non signé char, tampon, taille de longueur, enum gcry_random_level level

Remplir le tampon avec des octets aléatoires de longueur en utilisant une qualité aléatoire définie par le niveau.

http://www.g10code.com/p-libgcrypt.html