【发布时间】:2015-11-01 18:25:23
【问题描述】:
我需要生成一个指定长度的代码,它必须是随机且不重复的,到目前为止,我有随机字符串但它是重复的字母
这是我的代码;
#include <string>
#include <cstdlib>
#include <ctime>
class random_text_generator
{
public:
random_text_generator(const std::string& str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
: m_str(str)
{
std::srand(std::time(0));
}
std::string operator ()(std::size_t len = 1)
{
std::string seq;
std::size_t siz = m_str.size();
if(siz)
while(len--)
seq.push_back(m_str[rand() % siz]);
return seq;
}
private:
std::string m_str;
};
#include <iostream>
int main(void)
{
using namespace std;
random_text_generator rtg;
for(size_t cnt = 0; cnt < 7; ++cnt)
{
cout << rtg(cnt) << endl;
}
}
同样,这段代码生成了字符串,但它重复了一些字母,例如输出看起来像这样
**OUTPUT**
A K X K Y
看到 K 重复了。
【问题讨论】:
-
如果您可以改用
<random>。 -
当你说它不重复时,你的意思是它不是随机的?对于相同的数字出现并随机出现完全有效
-
一个简单的解决方案是创建一个包含所有可能字符的字符串,正如您所做的那样,使用
std::random_shuffle,然后将字符串大小调整为所需的字符数。 -
@XX3987: 所以只取洗牌后数组的前6个字母...
-
@XX3987
std::random_shuffle可以打乱所有随机访问范围,这包括std::strings。
标签: c++ arrays string random vector