【问题标题】:random element from array in cc中数组中的随机元素
【发布时间】:2013-06-17 09:42:22
【问题描述】:

如何从 c 中的字符数组中选择一个随机元素?

例如:

char *array[19];

array[0] = "Hi";


array[1] = "Hello";

我正在寻找类似 array[rand] 的东西,其中 rand 是 o 和数组长度(在本例中为 20)之间的随机整数,例如 1、2、3、19 等。

【问题讨论】:

  • 你在照顾rand()
  • 也许char* array[20];
  • 所以,需要明确的是,20 * rand() 是不正确的。使用rand() % 20。但是,如果您的数组有 20 个元素长,则需要修复变量声明!你只在那里分配了 19 个元素。
  • @svk 不,不要使用%,因为结果可能不一致。将 U(0,1) 值乘以 20 和 floor 将得到一个从 0 到 19 的 int,即 20 个元素都设置为从零开始的数组索引。
  • @pjs 指的是 linux 手册页中的这个问题:“Linux C 库中的 rand() 和 srand() 版本使用与 random(3) 相同的随机数生成器和 srandom(3), 所以低位应该和高位一样随机. 然而, 在旧的 rand() 实现中, 以及在不同系统上的当前实现中, 低位的随机性远低于高阶位。当需要良好的随机性时,请勿在旨在可移植的应用程序中使用此函数。(请改用 random(3)。)"

标签: c arrays random int


【解决方案1】:

您提出的是最好的解决方案 - 选择一个随机索引,然后使用该索引处的元素。如果您的问题是如何获取随机整数,请使用内置函数rand()

【讨论】:

    【解决方案2】:
    int n = rand()%20;
    printf("%s\n", array[n]);
    

    【讨论】:

      【解决方案3】:

      你可以尝试 array[rand() % ARRAY_LEN] 但你会得到一个字符而不是char*

      当你在做 array[0] = "Hi";这是不正确的,因为您分配给单个 charchar*

      或将您的char array[20] 转换为char *array[20],您可以分配一串字符

      【讨论】:

      • 你是对的。在将数组修改为指针之前,我遇到了段错误。 (点赞,谢谢)
      【解决方案4】:

      首先,由于您有一个字符串数组,而不是字符数组,因此您必须将其声明为 char* array[19];

      然后,您可以声明以下(总是有用的)宏

      #define ARR_SIZE(arr) ( sizeof((arr)) / sizeof((arr[0])) )

      最后,您可以选择arr[rand() % ARR_SIZE(arr)](同时请记住,在rand() 上执行% 不是不是在某个范围内获取随机数的正确方法。

      【讨论】:

      • 在大多数系统上,每次运行程序都会得到相同的答案,除非每次都为随机数生成器设置不同的值。查看srand(),但请注意,获得一个像样的种子实际上是相当困难的。 drand48() 系列 PRNG 函数也非常有用,尽管您仍然存在播种问题。
      • 这是一个正确的评论,但是我指的是在一个数字范围内以保持均匀分布的方式选择一个随机数的问题。
      【解决方案5】:

      这可以使用 c 库 stdlib.h 中的 rand 来完成

      你可以像这样得到一个随机数:

      char random_elem = array[rand()%20];

      你可以这样打印出来:

      printf("%d",array[rand()%20]);

      【讨论】:

      • 感谢您的贡献,但这个问题已经很少有高质量的答案,您的回答也没有增加任何新内容。关注一些unanswered C questions 怎么样?
      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2013-11-14
      • 2016-05-15
      • 1970-01-01
      • 2014-06-19
      相关资源
      最近更新 更多