我正在尝试生成一个随机的160位字符串,该字符串应该存储在名为str [20]的字符数组中。很明显,该数组包含20个字符。如何将160位更改为20个字符/数字?我正试图在C中这样做..任何帮助都非常感谢,因为我已经没有想法,然后在我的大学帮助台也无法帮助我..
答案 0 :(得分:1)
这看起来像homwork,所以我只给你基础知识:
您的变量将如下所示:
char str[20];
请注意,此数组将包含字节的数据,不一定是“字符”(字母,数字和标点符号,因为我们通常理解字符“)。
除非分配是关于编写自己的随机生成器,否则您可能希望使用C的运行时伪随机生成器(在stdlib.h
中),并使用其两个函数:srand()
和{{1 }}。 rand()
用于“种子”生成器(具有相同值的种子以获得可重复性,在调试期间有用,或者使用可变数字(通常与系统时间相关))以获得真正的随机数。{{1} }用于生成整数随机值。
因为rand()产生的值介于0和RAND_MAX之间(这是一个“大”数字),您可能需要使用modulo来获得正确的数量。例如
str [0] = char(rand()%256); //或类似的东西。
然而,rand()不会产生20个字节的整数,所以你需要获得几个rand值并在数组中适当地拟合它们。最直接的可能是调用rand 20次并每次存储1个字节,但也可以一次存储几个字节,使用指向str的部分。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
随机可打印的字符串。如果您不在乎它是否可打印,请删除对min((int)''的调用。注意我使用一个空终止符使它成为一个正确的c字符串,如果你不想这样,只需删除使最后一个字符为空的部分(并且部分taht打印它 - 那将是一个寻找的null终止符。)
#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);
}