【发布时间】:2021-03-15 16:53:14
【问题描述】:
我想生成 10 个唯一的字符串,每个字符串都打印在每行上,大小为 10。我已经制作了一个单独的函数来获取随机字符 - get_random_char() 并将它们存储在 temp 中,但是我得到了一个不需要的输出。
以下是我的方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
static const char alpha[]={
'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'
};
char get_random_char()
{
int alpha_size=sizeof(alpha)-1;
char A[10];
return alpha[rand() % alpha_size];
}
int main()
{
srand(time(NULL));
char str[10][10];
char A[10],temp[10][10];
int j;
for(int i=0;i<10;i++)
{
for(int q=0;q<10;q++)
{
temp[i][q]=get_random_char();
}
for( j=0;j<=i-1;j++)
{
if(strcmp(str[j],temp[i])==0)
break;
}
if(i==j)
{
strcpy(str[i],temp[i]);
}
else
i--;
}
for(int p=0;p<10;p++)
{
printf("%s\n",str[p]);
//printf("\n");
}
return 0;
}
输出:
LTOJMGAPMRLZSDECCFTJTLWEFRVFGWURSLBERDVDUIDOLHRPPKZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
LZSDECCFTJTLWEFRVFGWURSLBERDVDUIDOLHRPPKZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
TLWEFRVFGWURSLBERDVDUIDOLHRPPKZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
URSLBERDVDUIDOLHRPPKZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
UIDOLHRPPKZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
ZIYVNFMIKSEHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
EHLWSOCJRXOOHRCVBTKQGJYGGNLSVVMCEAYWODHI
OOHRCVBTKQGJYGGNLSVVMCEAYWODHI
GJYGGNLSVVMCEAYWODHI
MCEAYWODHI
【问题讨论】:
-
强制:如果你想做任何与密码学相关的事情,不要使用
rand。更好的是,永远不要使用rand。 -
非常感谢,这真的很有帮助!
标签: c random-seed