在编写QT项目时,产生随机数和随机字符串是十分常见的需求,使用qrand函数就能够实现
但是我们也知道,如果不使用种子的话,产生的随机数并不是真正的随机数,而是固定的数字
通常情况下,我们会使用当前时间作为随机数的种子,以产生真正意义上的随机数
Qt产生随机数代码如下:
int MainWindow::getRandom(int min,int max)
{
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
int num = qrand()%(max-min);
qDebug()<<num+min;
}
只需在调用时添加函数的参数即可产生指定范围的随机数
同理,我们也可以利用此方法产生随机字符串
Qt代码如下:
如果想要生成其它字符,将ch中的字符更换即可
QString MainWindow::getRandomString(int length)
{
qsrand(QDateTime::currentMSecsSinceEpoch());
const char ch[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int size = sizeof(ch);
char* str = new char[length + 1];
int num = 0;
for (int i = 0; i < length; ++i)
{
num = rand() % (size - 1);
str[i] = ch[num];
}
QString res(str);
return res;
}
参考链接:https://blog.csdn.net/luoyayun361/article/details/84540444
如果我们想要生成不重复的随机数,只需对以上代码稍加改动
将产生的随机数存放到数组中,在每次产生新的随机数的同时,在随机数列表中检查是否包含该数
如果包含则重新生成,直到生成新的随机数为止
具体代码如下:
int MainWindow::getRandom(int min,int max)
{
QList<int> list;
int i,j;
bool res = true;
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
for (int i=0; i<10; i++) {
int num = qrand()%(max-min)+min;
list.append(num);
while(res)
{
for(j=0;j<i;j++)
{
if(list[i]==list[j])
break;
}
if(j<i)
{
list[i] = qrand()%(max-min)+min;
}
if(j==i)
res=!res;
}
}
}