C++随机名称生成器给出重复字符串
C++ Random Name Generator giving repeat string
我拼凑了一个旨在构建随机名称的小程序。它还没有完成,但是如果我尝试重新运行该程序,它当前正在重复相同的名称。程序建立在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));
相关文章:
- 字符串-C++后显示的随机字符
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 我的求解(字符串 a、字符串 b)的输出与随机哈希中的预期输出不匹配
- 将字符串转换为 int 后的随机值
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- C++读取大文件并将其保存到字符串中,然后删除特定的随机单词
- 提取字符串中的随机单词
- 选择随机字符串数组的排序
- 生成随机长度的数字字符串
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- 这个随机字符串打印代码有什么问题?
- 尝试以随机字符(长读取)打印字符串返回结果
- 随机添加到字符串C++的空字符
- C++随机名称生成器给出重复字符串
- 如何生成伪随机 32 字节字符串以用作加密哈希函数中的盐?
- 队列快速排序不排序和打印随机字符串[C ]
- 随机字符串生成器不编辑我的字符串数组 (C++)
- 在长字符串(随机位置)中的C char搜索