📅  最后修改于: 2023-12-03 15:07:37.885000             🧑  作者: Mango
在开发过程中,有时候需要生成随机字符串来进行测试和验证,本文将介绍如何在 C++ 中生成随机字符串。
C++11 提供了一个新的随机数库 <random>
,用于生成真正的随机数。可以使用 <random>
库中的 uniform_int_distribution
类来生成指定长度的随机字符串。
代码实现如下:
#include <random>
#include <string>
std::string random_string(int length) {
std::string str;
static const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::random_device rd;
std::mt19937 generator(rd());
std::uniform_int_distribution<> distribution(0, sizeof(charset) - 2);
for (int i = 0; i < length; i++) {
str.push_back(charset[distribution(generator)]);
}
return str;
}
上述代码中,首先定义了 random_string
函数来生成指定长度的随机字符串。接着定义了一个字符集,包含了小写字母、大写字母。然后使用 <random>
库的 random_device
类来获取真正的随机种子,并使用 mt19937
引擎生成随机数。最后通过 uniform_int_distribution
类来生成指定长度的随机字符串。
在 C++ 中还可以使用 rand()
函数来生成随机数,但是 rand()
函数并不是真正的随机数。rand()
函数所生成的随机数是一个伪随机数,需要通过设置随机种子来产生不同的随机数序列。
代码实现如下:
#include <cstdlib>
#include <ctime>
#include <string>
std::string random_string(int length) {
std::string str;
static const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::srand((unsigned int)std::time(nullptr));
for (int i = 0; i < length; i++) {
str.push_back(charset[std::rand() % (sizeof(charset) - 1)]);
}
return str;
}
上述代码中,首先定义了 random_string
函数来生成指定长度的随机字符串。接着定义了一个字符集,包含了小写字母、大写字母。然后使用 srand()
函数来设置随机种子,并使用 rand()
函数生成随机数。最后通过取模的方式来生成指定长度的随机字符串。
本文介绍了在 C++ 中生成随机字符串的两种方法,其中使用 <random>
库可以生成真正的随机数,而 rand()
函数生成的是伪随机数。建议使用 <random>
库来生成随机数,以提高生成随机字符串的质量。