8到16个字符之间的随机名称生成

  • 本文关键字:随机 16个 字符 之间 c++
  • 更新时间 :
  • 英文 :


所以我试图生成一个8到16个字符之间的随机名称。它实际上不需要拼写一个真实的名字,它只是一堆随机的字母。

到目前为止,我已经生成了一个随机的名字和姓氏,但它们都是12 的大小

#include <iostream>
#include <ctime>
using namespace std;
void genID(char letters[26]);
int main()
{
srand(time(0));
char letters[26] = {'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'};
genID(letters);
}
void genID(char letters[26])
{
string firstTemp, lastTemp;
for(int i = 0; i < 12; i++)
{
firstTemp = firstTemp + letters[rand() % 26];
lastTemp = lastTemp+ letters[rand() % 26];
}
}

我有一段代码,可以在每次迭代中分别打印出每个名字和姓氏。我只是想展示我需要在8到16个字符之间生成的主要代码。

谢谢!

要生成包含8到16个字母的字符串,必须连接8到16字母。

要生成A和B(包括A和B(之间的随机整数,可以使用A + rand() % (B - A + 1)。(不考虑质量(

试试这个:

void genID(char letters[26])
{
string firstTemp, lastTemp;
int firstLen = 8 + rand() % (16 - 8 + 1);
int lastLen = 8 + rand() % (16 - 8 + 1);
for(int i = 0; i < firstLen; i++)
{
firstTemp = firstTemp + letters[rand() % 26];
}
for(int i = 0; i < lastLen; i++)
{
lastTemp = lastTemp+ letters[rand() % 26];
}
}

长度本身应该是随机的:

int len = rand() % 9 + 8 // produce a number between 8 and 16
for(int i = 0; i < len; i++)
{
firstTemp = firstTemp + letters[rand() % 26];
lastTemp = lastTemp+ letters[rand() % 26];
}

由于for循环语句,您将获得12个字符。特别是CCD_ 3条件。为了理解这个基本结构,您应该阅读更多关于循环如何工作的内容。例如,w3school有一个非常清晰的解释。

为了使循环执行8到16次(生成8到16个字符(,在开始循环之前,获取字符计数int letterCount = 8 + (rand() % 9);的随机数。然后,将for循环语句更改为for (int i = 0; i < letterCount; i++)。这应该能解决你的问题。

有很多方法可以解决它。随机化循环长度已经提到了。另一种方法是生成两个名称,每个名称8个字符,但在第二种情况下,您将允许使用空格。因此,您现在可以得到一个包含0-8个空格的16个字符的名称。去掉这些空格,剩下8-16个字符。

您必须为长度添加一个变量,并使其成为从8到16的随机数。

void genID(char letters[26])
{
int length = rand() % 9 + 8;
string firstTemp, lastTemp;
for(int i = 0; i < length; i++)
{
firstTemp = firstTemp + letters[rand() % 26];
lastTemp = lastTemp + letters[rand() % 26];
}
}

但是,如果您只需要小写字母的随机组合,则可以使用ASCII和字符的数值。

void genID()
{
int length = rand() % 9 + 8;
string firstTemp, lastTemp;
for(int i = 0; i < length; i++)
{
firstTemp = rand() % 26 + 'a';
lastTemp = rand() % 26 + 'a';
}
}

或者,如果不能使用ASCII,可以使用字符串而不是字符数组。

#include <iostream>
#include <ctime>
void genID(string letters);
int main()
{
srand(time(0));
string letters = "abcdefghijklmnñopqrstuvwxyz";
genID(letters);
}
void genID(string letters)
{
int length = rand() % 9 + 8;
string firstTemp, lastTemp;
for(int i = 0; i < length; i++)
{
firstTemp = firstTemp + letters[rand() % 26];
lastTemp = lastTemp + letters[rand() % 26];
}
}

最后,您可能应该阅读:

  1. 为什么rand((的使用被认为是不好的
  2. 为什么"使用命名空间std;"被认为是不好的做法

然后这样做:

#include <iostream>
#include <random>
#include <ctime>
void genID();
int main()
{
genID();
}
void genID()
{
std::default_random_engine eng(time(0));
std::uniform_real_distribution<double> urd1(0, 26);
std::uniform_real_distribution<double> urd2(0, 9);
std::string firstTemp, lastTemp;
int length = int (urd2(eng)) + 8;
for(int i = 0; i < length; i++)
{
firstTemp += int (urd1(eng)) + 'a';
lastTemp += int (urd1(eng)) + 'a';
}
}

最新更新