C++ 如何生成6位数字-唯一ID c++;代码

C++ 如何生成6位数字-唯一ID c++;代码,c++,ubuntu,C++,Ubuntu,可能重复: 我需要创建一个6位数的数字。我应该用什么?有人能给我一个C++代码例子吗? 这是我的代码:(偶尔数字会重复) #包括 #包括 #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { /*简单的“srand()”种子:只需使用“time()”*/ unsigned int iseed=(unsigned int)时间(NULL); srand(iseed); /*现在生成5个伪随机数*/ int i; 布尔-达=假; while(da=

可能重复:

我需要创建一个6位数的数字。我应该用什么?有人能给我一个C++代码例子吗? 这是我的代码:(偶尔数字会重复)

#包括
#包括
#包括
#包括
使用名称空间std;
int
main(int argc,char*argv[])
{
/*简单的“srand()”种子:只需使用“time()”*/
unsigned int iseed=(unsigned int)时间(NULL);
srand(iseed);
/*现在生成5个伪随机数*/
int i;
布尔-达=假;
while(da==false)

{if(rand()%1000000你可以这样做

#include <random>
#include <string>

std::string s("      "); //six spaces
std::random_device rd;
std::mt19937 engine(rd());
std::uniform_int_distribution<char> dist('0', 'z');

for(char& c : s)
{
    c=dist(eng);
}
#包括
#包括
std::string s(“”;//六个空格
std::随机_装置rd;
标准:mt19937发动机(rd());
标准:均匀分布区('0','z');
用于(字符和c:s)
{
c=距离(英语);
}
但是,它将包含一些标点符号。您可以修改它以忽略超出可接受范围的字符

编辑: 将mine和James answer合并为一个灵活的解决方案可能会产生如下结果:

std::string const char_set(
    "abcdefghijklmnopqrstuvwxyz"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "0123456789" );

std::string s("      "); //six spaces
std::random_device rd;
std::mt19937 engine(rd());
std::uniform_int_distribution<std::size_t> dist(0u, char_set.size() - 1);

for(char& c : s)
{
   c=char_set[dist(eng)];
}  
std::字符串常量字符集(
“abcdefghijklmnopqrstuvwxyz”
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”
"0123456789" );
std::string s(“”;//六个空格
std::随机_装置rd;
标准:mt19937发动机(rd());
std::uniform_int_distribution dist(0u,char_set.size()-1);
用于(字符和c:s)
{
c=字符集[dist(eng)];
}  

编辑:我将分发的结尾更改为size()-1,否则终止的null将包含在分发中。

将所有数字放入一个向量中

int lowest_value = 0, highest_value = VECTOR_SIZEOF, range = (highest_value - lowest_value) + 1;
int pass_length = 6;
int random_number = 0;
string password = "";

for (i=1; i<pass_length; i++) 
{
    random_number = lowest_value + (int)((range * rand()) / (RAND_MAX + 1.0));
password.insert((char)random_number);
}
int最低值=0,最高值=向量大小,范围=(最高值-最低值)+1;
int pass_length=6;
int随机数=0;
字符串密码=”;

对于(i=1;i只需使用与在一组数据中的任意随机选择相同的技术即可 有限值。将值放入数组中,然后使用随机值 生成器从中进行选择。大致如下:

std::string const legalChars(
        "abcdefghijklmnopqrstuvwxyz"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "0123456789" );
std::string results;
while ( results.size() != targetLength ) {
    results += legalChars[ randomInt( legalChars.size() ) ];
}
randomInt
应该是在
range
[0,arg)

我以前没有问过类似的问题,但其他人问过,如果重复的问题没有回答您的问题,请编辑此问题以使其更清楚。@user1222905:您可能也没有使用过谷歌或此处的搜索功能。@juergend:在该问题的公认答案中
rand()
建议用于生成密码。我已经编辑了我的代码。请删除-1投票+1,我以前从未遇到过这种方式,谢谢你教我一些新东西:-)@Konrad没问题随机数是C++11标准库的一个很好的补充。非常感谢。我必须包括哪些库?我有错误:随机设备不是STD的成员密码中的字符将取决于本地使用的编码;在IBM大型机上,
'0'
大于
'z'
---我不知道
uniform\u int\u发行版
在那里能做什么。(还有一个事实是
std::uniform\u int\u发行版
通常不可用。)@user1222905查看我的EDITwhat is arg。您也可以发布方法randomInt吗?
arg
randomInt
的一个参数
randomInt
是用于返回给定范围内随机整数的任何函数的占位符。
dist
,例如,在111111的解决方案中。我没有费心扩展它,因为se有很多种可能性,如果您的编译器支持的话,最好使用新标准库中的一种。
std::string const legalChars(
        "abcdefghijklmnopqrstuvwxyz"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        "0123456789" );
std::string results;
while ( results.size() != targetLength ) {
    results += legalChars[ randomInt( legalChars.size() ) ];
}