I\'m trying to generate random permutations of an 80-character fixed string in C. Much to my dismay, the system I\'m working on lacks strfry(). What\'s the best way for me to
Just use the Open Source GLIBC implementation, as found by Google Code.
char *
strfry (char *string)
{
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 (string);
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;
}
You might want to change the GLIBC specific data types to something more generic.
This code uses the Fisher-Yates shuffle which is actually quite easy to implement by yourself, and very efficient.
void gcry_randomize (unsigned char *buffer, size_t length, enum gcry_random_level level)
Fill buffer with length random bytes using a random quality as defined by level.
http://www.g10code.com/p-libgcrypt.html
create a 80-line array, put a character and a random number into each line of the array, then sort the array on the random numbers.
Rebuild string from sorted array.