Создайте случайную строку или число в Qt4 - PullRequest
21 голосов
/ 14 июля 2010

Есть ли какая-либо функция или что-то подобное, с помощью которой я могу создавать совершенно случайные строки или числа?

Ответы [ 6 ]

18 голосов
/ 14 июля 2010

Вы можете создать случайные числа, используя qrand . Если вам нужны строки, вы можете преобразовать int в строку. Вы также можете проверить класс QUuid , который генерирует универсально уникальные идентификаторы. Это не «абсолютно случайно», но они уникальны.

12 голосов
/ 24 октября 2012
int number;
int randomValue = qrand() % number;

возвращает случайное число randomValue с 0 <= <code>randomValue <<code>number.

qrand() объявлен в QtGlobal , который # включен во многие другие файлы Qt.

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

преобразует целое число в QString.

2 голосов
/ 19 сентября 2014

Это не очень хороший метод для генерации случайных чисел в заданном диапазоне. (На самом деле это очень и очень плохо для большинства генераторов)

Вы предполагаете, что младшие биты от генератора распределены равномерно. Это не относится к большинству генераторов. В большинстве генераторов случайность встречается в старших разрядах.

Используя остаток после деления, вы фактически выбрасываете случайность.

Вы должны масштабировать, используя умножение и деление. Не используется оператор по модулю. например,

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

Если generator_output в [0, generator_maximum], my_number будет в [start_required , start_required + range_required].

2 голосов
/ 17 сентября 2014

В следующем примере создаются буквенные строки с заглавными буквами от 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;
}
0 голосов
/ 21 ноября 2018

Использование QUuid

#include <QUuid>
QString randomStr = QUuid::createUuid();
0 голосов
/ 14 ноября 2018

Здесь - хороший ответ, используя qrand () . В приведенном ниже решении используется QUuid , как уже предлагалось выше, для генерации случайных и уникальных идентификаторов (все они 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"
...