加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中随机化一个字符串

发布时间:2020-12-16 03:21:29 所属栏目:百科 来源:网络整理
导读:我试图在C中生成一个80个字符的固定字符串的随机排列.令我沮丧的是,我正在研究的系统缺乏strfry().对我来说,生成此字符串的随机排列的最佳方法是什么?因为这将循环约. 100,000次,性能是一个问题. 解决方法 只需使用 Google Code发现的开源GLIBC实现. char *
我试图在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,实际上很容易自己实现,非常高效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读