【发布时间】:2011-03-15 18:31:43
【问题描述】:
是否有任何函数或类似的东西可以让我创建完全随机的字符串或数字?
【问题讨论】:
是否有任何函数或类似的东西可以让我创建完全随机的字符串或数字?
【问题讨论】:
使用Quuid
#include <QUuid>
QString randomStr = QUuid::createUuid();
【讨论】:
Here 是使用qrand() 的好答案。下面的解决方案使用QUuid,正如上面已经建议的那样,生成随机且唯一的ID(它们都是hex 数字):
#include <QApplication>
#include <QDebug>
#include <QRegularExpression>
#include <QUuid>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// random hex string generator
for (int i = 0; i < 10; i++)
{
QString str = QUuid::createUuid().toString();
str.remove(QRegularExpression("{|}|-")); // if you want only hex numbers
qDebug() << str;
}
return a.exec();
}
输出
"479a494a852747fe90efe0dc0137d059"
"2cd7e3b404b54fad9154e46c527c368a"
"84e43735eacd4b8f8d733bf642476097"
"d7e824f920874f9d8b4264212f3bd385"
"40b1c6fa89254705801caefdab5edd96"
"b7067852cf9d45ca89dd7af6ffdcdd23"
"9a2e5e6b65c54bea8fb9e7e8e1676a1a"
"981fa826073947e68adc46ddf47e311c"
"129b0ec42aed47d78be4bfe279996990"
"818035b0e83f401d8a56f34122ba7990"
【讨论】:
【讨论】:
qrand() is now obsolete - QRandomGenerator 应改为使用。
这不是在给定范围内生成随机数的好方法。 (事实上这对大多数生成器来说是非常非常糟糕的)
您假设生成器的低位是均匀分布的。大多数发电机不是这种情况。在大多数生成器中,随机性发生在高位。
通过使用除法后的余数,您实际上是在抛弃随机性。
您应该使用乘法和除法进行缩放。不使用模运算符。 例如
my_numbe r= start_required + ( generator_output * range_required)/generator_maximum;
如果generator_output 在[0, generator_maximum] 中,
my_number 将在 [start_required , start_required + range_required] 中。
【讨论】:
以下示例生成大写字母从 A 到 Z 且长度 = len 的字母字符串。
QString randString(int len)
{
QString str;
str.resize(len);
for (int s = 0; s < len ; ++s)
str[s] = QChar('A' + char(qrand() % ('Z' - 'A')));
return str;
}
【讨论】: