Existe-t-il une fonction ou quelque chose du genre permettant de créer des chaînes ou des nombres totalement aléatoires?
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.
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;
}
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]
.
Utilisez QUuid
#include <QUuid>
QString randomStr = QUuid::createUuid();
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"