Use*_*645 3 c++ random int type-conversion char
我对此的看法是
#include <iostream>
int main()
{
for( int i = 0; i < 20; ++i) {
std::cout << (char) ((random() % (int('Z') + 1)) + int('A')) << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎非常直接。您生成一个数字,它介于所有小于或等于Z和大于或等于 之间A。如果你玩它,你会发现还生成了其他字符。这是为什么?
使用<random>,而不是假设 ASCII,你可能会这样做:
const std::string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
constexpr std::size_t output_size = 20;
std::mt19937 rng{std::random_device{}()};
std::uniform_int_distribution<> dis(0, alphabet.size() - 1);
std::string res;
res.reserve(output_size);
std::generate_n(std::back_inserter(res),
output_size,
[&](){ return alphabet[dis()]; });
Run Code Online (Sandbox Code Playgroud)
char c = *("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + rand() % 26);
Run Code Online (Sandbox Code Playgroud)
至少是便携的。请注意在常量上使用指针算术,该const char[27]常量衰减为const char*表达式中的类型。转出rand()的东西出来std::random,如果上面没有足够的随机性。
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |