我想创建一个由字母数字字符组成的随机字符串。我希望能够指定字符串的长度。
我如何在 C++ 中做到这一点?
原文由 jm. 发布,翻译遵循 CC BY-SA 4.0 许可协议
标准库中最合适的函数是 std::sample :
#include <algorithm>
#include <iterator>
#include <random>
#include <string>
#include <iostream>
static const char charset[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
template<typename URBG>
std::string gen_string(std::size_t length, URBG&& g) {
std::string result;
result.resize(length);
std::sample(std::cbegin(charset),
std::cend(charset),
std::begin(result),
std::intptr_t(length),
std::forward<URBG>(g));
return result;
}
int main() {
std::mt19937 g;
std::cout << gen_string(10, g) << std::endl;
std::cout << gen_string(10, g) << std::endl;
}
随机数生成器的状态应保持在调用之间的函数之外。
原文由 Tomilov Anatoliy 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
Mehrdad Afshari 的 回答 可以解决问题,但我发现它对于这个简单的任务来说有点过于冗长。查找表有时可以创造奇迹:
请注意
rand
生成质量差的随机数。