Как Вы генерируете случайные строки в C++?

Я ищу методы для генерации случайных строк в C++. Вот мой код:

string randomStrGen(int length) {
    static string charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    string result;
    result.resize(length);

    srand(time(NULL));
    for (int i = 0; i < length; i++)
        result[i] = charset[rand() % charset.length()];

    return result;
}

Но seed(time(NULL)) не достаточно случайно. Там какой-либо другой лучший путь состоит в том, чтобы генерировать случайные строки в C++?

12
задан Bill the Lizard 25 January 2011 в 20:20
поделиться

4 ответа

Не звоните SRAND () на каждую вызов функции - вызовите его только при первом вызове функций или запуске программы. Вы носите, чтобы иметь флаг, указывающий, был ли SRAND () уже назван.

Среднее метод хороши, за исключением того, что вы неправильно используете Srand () и получите предсказуемо плохие результаты.

25
ответ дан 2 December 2019 в 05:40
поделиться

на системах Unix вы можете прочитать случайные значения из файла / dev / random

0
ответ дан 2 December 2019 в 05:40
поделиться

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

В конкретных, большинство стандартных библиотеках обеспечивают линейные конгруэнтские генераторы, которые не очень хорошо работают, когда вы MOD их результаты с небольшими числами. Boost.random имеет генератор Twister Mersenne.

Как говорит Sharptooth, хотя (хорошее определение!), Только семя генератора один раз, в самом начале вашей программы. Высевая его каждый раз, когда вы хотите что-то случайное, является контрпродуктивным.

1
ответ дан 2 December 2019 в 05:40
поделиться

Сделайте интерфейс, чтобы получить случайное число на этом сайте http://www.random.org/ , и вы обязательно получите реальное случайный номер! Но если вы ищете производительность ...

1
ответ дан 2 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: