[英]Randomize a string in C
我試圖在C中生成一個80個字符的固定字符串的隨機排列。令我沮喪的是,我正在研究的系統缺乏strfry()。 對我來說,生成此字符串的隨機排列的最佳方法是什么? 因為這將循環約。 100,000次,性能是一個問題。
只需使用Google Code中的開源GLIBC實施。
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;
}
您可能希望將GLIBC特定數據類型更改為更通用的數據類型。
這段代碼使用了Fisher-Yates shuffle ,它實際上非常容易實現,非常有效。
創建一個80行數組,將一個字符和一個隨機數放入數組的每一行,然后在隨機數上對數組進行排序。
從排序數組中重建字符串。
void gcry_randomize(unsigned char * buffer,size_t length,enum gcry_random_level level)
使用由級別定義的隨機質量填充具有長度隨機字節的緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.