我需要生成一个指定长度的代码,它必须是随机的,不重复的,到目前为止,我有随机字符串,但它重复这些字母
这是我的代码;
#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正在重复。
答案 0 :(得分:2)
您可以使用类似以下代码的内容。 这会生成有效字符的随机排列,然后将此排列的前6个字符复制到新字符串。
#include <random>
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
const int max_len = 6;
std::string valid_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(valid_chars.begin(), valid_chars.end(), g);
std::string rand_str(valid_chars.begin(), valid_chars.begin() + max_len);
std::cout << rand_str;
return 0;
}
答案 1 :(得分:-1)
所以这个功能解决了我的问题
void foonkshun(){
char database[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K','L', 'M',
'N', 'O','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
random_shuffle(database, database + 25);
for (int i = 1; i < 6; i++){
cout << database[i];
}
}
感谢Neil Kirk,Ed Heal,cad,Cornstalks。 :d