web-dev-qa-db-fra.com

Créer une chaîne ou un nombre aléatoire dans Qt4

Existe-t-il une fonction ou quelque chose du genre permettant de créer des chaînes ou des nombres totalement aléatoires?

21
defiant

Vous pouvez créer des nombres aléatoires en utilisant qrand . Si vous avez besoin de chaînes, vous pouvez convertir l'int en chaîne. Vous pouvez également vérifier la classe QUuid , qui génère des identificateurs universellement uniques. Ce ne sont pas «totalement aléatoires», mais ils sont uniques.

18
user362638
int number;
int randomValue = qrand() % number;

renvoie un nombre aléatoire randomValue avec 0 <= randomValue <number.

qrand() est déclaré dans QtGlobal qui est #inclus par beaucoup d'autres fichiers Qt.

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

convertit un entier en QString.

12
Barış Akkurt

L'exemple suivant génère des chaînes alphabétiques avec des lettres majuscules de A à Z et une longueur = 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
Uga Buga

Ce n'est pas une très bonne méthode pour générer des nombres aléatoires dans une plage donnée. (En fait c'est très très mauvais pour la plupart des générateurs)

Vous supposez que les bits de poids faible du générateur sont uniformément répartis. Ce n'est pas le cas avec la plupart des générateurs. Dans la plupart des générateurs, le caractère aléatoire se produit dans les bits de poids fort.

En utilisant le reste après les divisions, vous supprimez le caractère aléatoire.

Vous devez mettre à l'échelle en utilisant la multiplication et la division. Ne pas utiliser l'opérateur modulo .

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

Si generator_output est dans [0, generator_maximum], my_number sera dans [start_required , start_required + range_required].

2
Paul

Utilisez QUuid

#include <QUuid>
QString randomStr = QUuid::createUuid();
0
Bibin Venugopal

Ici est la bonne réponse en utilisant qrand () . La solution ci-dessous utilise QUuid , comme déjà suggéré ci-dessus, pour générer des identifiants uniques et aléatoires (ce sont tous des nombres 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();
}

Sortie

"479a494a852747fe90efe0dc0137d059"
"2cd7e3b404b54fad9154e46c527c368a"
"84e43735eacd4b8f8d733bf642476097"
"d7e824f920874f9d8b4264212f3bd385"
"40b1c6fa89254705801caefdab5edd96"
"b7067852cf9d45ca89dd7af6ffdcdd23"
"9a2e5e6b65c54bea8fb9e7e8e1676a1a"
"981fa826073947e68adc46ddf47e311c"
"129b0ec42aed47d78be4bfe279996990"
"818035b0e83f401d8a56f34122ba7990"
0
Bobur