我试图在C中产生一个80个字符的固定字符串的随机排列。很令我沮丧的是,我正在工作的系统缺少strfry()。生成这个字符串的随机排列的最好方法是什么?由于这将循环大约。 100,000次,性能是一个问题。在C中随机化一个字符串
6
A
回答
13
只需使用开源GLIBC实现,如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;
}
您可能想要将GLIBC特定数据类型更改为更通用的。
此代码使用Fisher-Yates shuffle这实际上很容易实现,并且非常高效。
-2
空隙gcry_randomize(无符号字符*缓冲液中,为size_t长度,枚举gcry_random_level电平)与使用如由电平所定义的随机质量长度随机字节
填充缓冲器。
0
创建一个80行阵列,把一个字符和一个随机数到所述阵列的每一行,则该随机数字对数组进行排序。
从排序的数组中重建字符串。
相关问题
- 1. 随机尾随字符在C中打印一个字符串
- 2. 混淆/随机化一个字符串
- 3. 随机化字符串中的字符?
- 4. 随机化字符串
- 5. 在一个字符串中随机播放字母C++
- 6. 在字符串中随机化字母C
- 7. 随机化多个字符串列表
- 8. 随机化字符串中的字符列表,C#
- 9. 随机化字符串字符
- 10. 在列表C中随机化字符串时出错#
- 11. 如何在字符串中随机替换一个字符?
- 12. 如何随机化62个字符的整个字符串?
- 13. 如何将C中两个字符串的字符随机组合在一起?
- 14. 在一个长字符串中的C++字符搜索(随机位置)
- 15. 构建一个随机字符串
- 16. 匹配一个随机字符串
- 17. 生成一个随机字符串
- 18. C程序中找到一个随机字符串
- 19. C套接字 - 一次随机接收多个字符串
- 20. 从C#中的字符串列表生成随机字符串?
- 21. 在C中的字符串随机字符列表#
- 22. 随机化字符串而不重复
- 23. 随机化字符串选择
- 24. 随机化字符串的大小写
- 25. 使用UILocalNotification与随机化字符串
- 26. 在Qt4中创建一个随机字符串或数字
- 27. 将字符串随机插入另一个字符串
- 28. 我如何随机化一个字符串?
- 29. C++随机字符
- 30. C字符串有随机尾随字符,空终止问题?
您可能想更改那里的专有词,否则Stallman可能会用他的武士刀让你。一个适当的替代品可能是GLIBC特定的。 – 2008-12-31 10:32:28
康拉德,你是一个绅士和学者!我试着搜索谷歌代码,但我正在寻找诸如“随机化c中的字符串”而不是简单地'strfry'。谢谢! – Max 2008-12-31 10:52:21