web-dev-qa-db-ja.com

Qt4でランダムな文字列または数値を作成する

完全にランダムな文字列や数値を作成できる関数などはありますか?

23
defiant

qrand を使用して乱数を作成できます。文字列が必要な場合は、intを文字列に変換できます。 QUuid クラスをチェックして、Universally Unique Identifiersを生成することもできます。それらは「完全にランダム」ではありませんが、ユニークです。

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

0 <= randomValue <randomValueの乱数numberを返します。

qrand()QtGlobal で宣言されており、他の多くのQtファイルに#includeされています。

_int value;
QString aString = QString::number(value);
_

整数をQStringに変換します。

12
Barış Akkurt

次の例では、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
Uga Buga

これは、指定された範囲内の乱数を生成するための非常に良い方法ではありません。 (実際、それはほとんどのジェネレータにとって非常に悪いです)

ジェネレータからの下位ビットが均一に分布していると想定しています。これはほとんどのジェネレーターには当てはまりません。ほとんどのジェネレータでは、ランダム性は上位ビットで発生します。

除算後の余りを使用することで、事実上ランダム性を捨てることになります。

乗算と除算を使用してスケーリングする必要があります。モジュロ演算子を使用しません。例えば

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
Paul

QUuidを使用する

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

ここqrand() を使用する良い答えです。以下の解決策では、すでに上で提案したように、ランダムな一意のIDを生成するために 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"
0
Bobur