我需要创建一个6位数字。我该怎么用?有人能给我一个c ++代码示例吗?
这是我的代码:(偶尔会重复这个数字)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int
main (int argc, char *argv[])
{
/* Simple "srand()" seed: just use "time()" */
unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);
/* Now generate 5 pseudo-random numbers */
int i;
bool da=false;
while (da==false)
{if (rand ()%1000000<=999999)
{cout<<"random nr: "<<rand ()%1000000<<endl;
da=true;
}
else da=false;
}
/* for (i=0; i<5; i++)
{
printf ("rand[%d]= %u\n",
i, rand ());
}*/
return 0;
}
THX 欣赏
答案 0 :(得分:1)
你可以做这样的事情
#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);
}
然而,它会包含一些标点符号。你可以修改它以忽略你所接受范围之外的字符。
http://en.cppreference.com/w/cpp/numeric/random
编辑: 合并我的和詹姆斯一起回答一个灵活的解决方案可能会产生这样的事情:
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)];
}
编辑:我将分发的结尾更改为size() - 1,否则终止空值将包含在分发中。
答案 1 :(得分:0)
将所有数字放入Vector
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);
}
答案 2 :(得分:0)
使用与一组中任意随机选择相同的技术 有限值。将值放在数组中,然后使用随机数 发电机可供选择。有点像:
std::string const legalChars(
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789" );
std::string results;
while ( results.size() != targetLength ) {
results += legalChars[ randomInt( legalChars.size() ) ];
}
(randomInt
应该是一个返回随机整数的函数
范围[0,arg)
。)