在Qt4中创建一个随机字符串或数字

25

有没有一种函数或类似的东西可以创建完全随机的字符串或数字?

7个回答

22

您可以使用qrand创建随机数。如果您需要字符串,可以将int转换为字符串。您还可以检查QUuid类,该类生成通用唯一标识符。它们不是“完全随机”的,但它们是唯一的。


你回答中的链接现在已经失效了! - zar
3
qrand()现已过时,请改用QRandomGenerator - Nathan Osman

12
int number;
int randomValue = qrand() % number;

返回0 <= randomValue < number的随机数randomValue

qrand()QtGlobal中声明,该文件被许多其他Qt文件包含。

int value;
QString aString = QString::number(value);

将整数转换为QString。


4

适用于Qt6

double value= QRandomGenerator::global()->bounded(0, 10);

生成一个从0到10的双精度浮点数


3
以下示例生成由大写字母 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;
}

2
使用QUuid
#include <QUuid>
QString randomStr = QUuid::createUuid();

2

这不是一种很好的方法来在给定范围内生成随机数。(实际上,对于大多数生成器来说,这是非常非常糟糕的)

你假设从生成器中获取的低位比特是均匀分布的。但是大多数生成器并不是这样的。在大多数生成器中,随机性出现在高位比特中。

使用除法余数的方式实际上是在丢弃随机性。

你应该使用乘法和除法来进行缩放操作,而不是使用模运算符。 例如

my_numbe r= start_required + ( generator_output *  range_required)/generator_maximum;

如果 generator_output[0, generator_maximum] 范围内,那么 my_number 将会在 [start_required , start_required + range_required] 范围内。

0

这里是使用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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接