📜  在 C++ 中生成随机字符串(1)

📅  最后修改于: 2023-12-03 15:07:37.885000             🧑  作者: Mango

在 C++ 中生成随机字符串

在开发过程中,有时候需要生成随机字符串来进行测试和验证,本文将介绍如何在 C++ 中生成随机字符串。

使用 C++11 的

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 类来生成指定长度的随机字符串。

使用 rand() 函数

在 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> 库来生成随机数,以提高生成随机字符串的质量。