C++随机名称生成器给出重复字符串

C++ Random Name Generator giving repeat string

本文关键字:字符串 随机 C++      更新时间:2023-10-16

我拼凑了一个旨在构建随机名称的小程序。它还没有完成,但是如果我尝试重新运行该程序,它当前正在重复相同的名称。程序建立在Ubuntu Linux上,C++运行emacs文本编辑器。

这是下面的完整代码,我对C++仍然相当陌生,但以前没有遇到过这个问题。

#include <iostream>
#include <vector>
#include <iomanip>
#include <stdlib.h>
using namespace std;

string randomName(int length) {
char consonents[] = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'};
char vowels[] = {'a','e','i','o','u','y'};
string name = "";
int random = rand() % 2;
int count = 0;
for(int i = 0; i < length; i++) {
if(random < 2 && count < 2) {
name = name + consonents[rand() % 19];
count++;
}
else {
name = name + vowels[rand() % 5];
count = 0;
}
random = rand() % 2;
}
return name;
}

int main() {
cout << "Enter a name length: " << endl;
int length;
cin >> length;
cout << randomName(length) << endl;
return 0;
}

我已经阅读了 rand() 的可预测性,并且在与此类似的其他问题中,他们提到 rand() 经常重复值。当然,这不可能每次都运行程序,可以吗?

例如: 如果我运行名称长度为 5 的程序,我可能会得到类似的东西:tfuvi

如果我然后以名称长度为 2 的第二次运行该程序,我将得到:tf

如果我第三次运行程序,名称长度为 4,我将得到:tfuv

这不会是巧合吧?

非常感谢任何帮助,如果有任何文档可以解释这一点,或者如果有人知道原因,请告诉我,谢谢。

如果未提供种子值,则rand()函数将自动设定值 1 的种子。

这意味着每次运行程序时,您总是会得到相同的伪随机序列。因此,请使用srand(time(NULL))或其他方式播种您的随机数生成器: 初始化 srand 的推荐方法?

在调用rand()之前设置种子:

srand(time(NULL));

然后你可以打电话rand() % n

还要确保包括 ctime for time();

你必须初始化随机种子,在程序中使用rand()函数之前调用它

srand (time(NULL));