当前位置:  开发笔记 > 编程语言 > 正文

在C中随机化一个字符串

如何解决《在C中随机化一个字符串》经验,为你挑选了1个好方法。

我试图在C中生成一个80个字符的固定字符串的随机排列.令我沮丧的是,我正在研究的系统缺乏strfry().对我来说,生成此字符串的随机排列的最佳方法是什么?因为这将循环约.100,000次,性能是一个问题.



1> Konrad Rudol..:

只需使用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,它实际上非常容易实现,非常有效.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有