1

我正在尝试生成一个随机的 160 位字符串,该字符串应该存储在一个名为 str[20] 的字符数组中。很明显,该数组包含 20 个字符。如何将 160 位更改为 20 个字符/数字?我正在尝试在 C 中做到这一点。非常感谢任何帮助,因为我已经没有想法了,然后我大学的帮助台不会帮助我..

4

3 回答 3

1

这看起来像功课,所以我只会给你基础知识:

您的变量将如下所示:

char str[20];

请注意,此数组将保存数据字节,不一定是“字符”(字母、数字和标点符号,因为我们通常理解单词字符“)。

除非分配是关于编写自己的随机生成器,否则您可能希望使用 C 的运行时伪随机生成器(在 中stdlib.h),并使用它的两个函数:srand()rand()srand()用于“播种”生成器(具有相同值的种子以获得可重复性,在调试期间很有用,或者具有可变数(通常与系统时间相关)以获得真正的随机数。 rand()用于生成整数随机值。

因为 rand() 产生一个介于 0 和 RAND_MAX 之间的值(这是一个“大”数字),所以您可能需要使用模数来获得正确的数量。例如

str[0] = char(rand() % 256); // 或类似的东西。

但是 rand() 不会产生 20 字节的整数,因此您需要获取多个 rand 值并将它们适当地放入数组中。最直接的可能是调用 rand 20 次并每次存储 1 个字节,但一次存储多个字节也是可以的,使用指向 str 部分的指针。

于 2009-11-13T00:08:12.347 回答
0

一个随机的可打印字符串。如果您不在乎它是否可打印,请删除对 min((int)' ') 的调用。请注意,我使用空终止符使其成为正确的 c 字符串,如果您不想要这个,只需删除使最后一个字符为空的部分(并且打印它的部分 - 这将寻找一个空终止符。)

#include <stdlib.h>

int main()
{
    char* str[20];
    int i;

    for (i = 0; i < 19; i++)
    {
        char[i] = min((int)' ', rand() % CHAR_MAX);
    }

    char[19] = '\0';

    puts(str);
}
于 2009-11-13T00:22:37.280 回答
0

160 位是 20 个字节,因此可以容纳 20 个字符串字符。

如果 N 是连续包含所有位的数字,则可以编写如下循环:

int i;

for (i=0; i<20; i++) {
  str[i] = (char)(N & 0xFF); 
  N >>= 8;
}

编辑: C 确实没有可以连续保存所有位的数据类型。因此,您需要为每个包含您的部分位的变量将循环拆分为几个子循环。

另一方面,如果您一次生成一个位,则代码可能如下所示(假设您的随机函数称为“random()”并返回一个 0 或 1 的 int)

int i, j, b;

for (i=0; i<20; i++)
{
  b = 0;
  for (j=0; j<8; j++)
  {
    b |= (random() & 1);
    b <<= 1;
  }
  str[i] = (char)b;
}
于 2009-11-13T00:05:36.190 回答