wake-up-neo.com

Erstellen Sie eine zufällige Zeichenfolge oder Zahl in Qt4

Gibt es eine Funktion oder ähnliches, mit der ich völlig zufällige Zeichenfolgen oder Zahlen erstellen kann?

21
defiant

Sie können mit qrand Zufallszahlen erstellen. Wenn Sie Zeichenfolgen benötigen, können Sie das int in eine Zeichenfolge konvertieren. Sie können auch die Klasse QUuid überprüfen, die universell eindeutige Bezeichner generiert. Das ist nicht "völlig zufällig", aber sie sind einzigartig.

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

gibt eine Zufallszahl randomValue mit 0 <= randomValue <number zurück.

qrand() ist in QtGlobal deklariert.

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

konvertiert eine Ganzzahl in QString.

12
Barış Akkurt

Im folgenden Beispiel werden alphabetische Zeichenfolgen mit Großbuchstaben von A bis Z und length = len generiert.

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

Dies ist keine sehr gute Methode, um Zufallszahlen innerhalb eines bestimmten Bereichs zu erzeugen. (In der Tat ist es für die meisten Generatoren sehr schlecht)

Sie gehen davon aus, dass die niederwertigen Bits des Generators gleichmäßig verteilt sind. Dies ist bei den meisten Generatoren nicht der Fall. In den meisten Generatoren tritt die Zufälligkeit in den höherwertigen Bits auf.

Wenn Sie den Rest nach Divisionen verwenden, verwerfen Sie die Zufälligkeit.

Sie sollten mit Multiplikation und Division skalieren. Verwendung des Modulo-Operators. Z

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

Wenn generator_output in [0, generator_maximum] ist, wird my_number in [start_required , start_required + range_required] sein.

2
Paul

Verwenden Sie QUuid

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

Hier ist die gute Antwort mit qrand () . Die Lösung unten verwendet QUuid , wie oben bereits vorgeschlagen, um zufällige und eindeutige IDs zu generieren (sie sind alle hex-Nummern):

#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();
}

Ausgabe

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