生成由字母和数字组成的随机单词
Generating random word made of letters and digits
我正在寻求有关我的代码的帮助。我正在做应用程序,这将从 Imgur.com 下载随机图像,并且我坚持使用他们的名字生成器。
这是我有的代码
char letter;
unsigned short int asciiCode = 0;
std::string imageName = "";
std::ofstream fileToStoreImageNames;
if (!fileToStoreImageNames.is_open())
return -1;
for (auto i = 0; i < 6; i++)
{
/* if getTrueOrFalse()==0 return capitalLetter() if not return smallLetter() */
asciiCode = random.getTrueOrFalse() == 0 ? random.upperCase() : random.lowerCase();
letter = static_cast <char>(asciiCode);
if (imageName.size() > 0)
imageName += letter;
else
imageName = letter;
}
fileToStoreImageNames << imageName << std::endl;
我做了一些生成器,它们从定义的范围内返回数字(在 random.upperCase() 的情况下,它的范围为 65 到 90),大写有 50% 的机会,小写有 50% 的机会。后来我通过static_cast将这些数字转换为字符。 目前,我只将这些名称写入文件,我可以看到它没有按预期工作。如果我只是编译这段代码,它正在写入类似
bbbbbb
rrrrrr
YYYYYY
vvvvvv
UUUUUU
EEEEEE
rrrrrr
但是,当我逐步调试它时,它正在正常工作,并且我收到随机字母。有我的文件经过 11 次尝试,第 8 行和第 11 行,是逐步调试的结果。
你的程序似乎太快了。如果您调试代码,则时间会过去,并且随机数生成器 (RNG) 会从操作系统获得不同的时间点。 RNG 使用当前时间来提供伪随机数。
您可以使用 c++11 标准伪随机数生成的 RNG。RNG 对象实例化一次,并将在循环的每个周期中提供不同的随机数。
与其在每次调用 random
函数时都播种 RNG,不如在该类的构造函数中执行一次,然后在整个类成员函数中存储和重用生成器。出现您的问题是因为如果它们使用相同的时间戳播种,它们会产生相同的结果,因此您会在同一秒内多次调用该函数的相同字符。使用 C++11 随机库时,您甚至不应该使用时间戳作为种子。
相关文章:
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 如何使数组以单词而不是数字的形式出现
- 如何在函数中输入数字以输出单词?
- C++:如果用户输入数字将其转换为单词,并且如果按回车键程序应退出,则使用开关大小写
- 从文件的一行中查找数字的平均值,避免使用第一个单词
- 找到一些单词后如何解析数字
- C++:对单词而不是数字进行快速排序
- 分类包含数字和单词的字符串向量
- 从文本文件(c++)中读取单词和数字
- 读取数字并转换为单词
- 正则表达式使用数字作为标记拆分单词
- 使用C++计算字符串中字母数字单词数量的最有效方法
- 打印由用户定义的数组,第一个数字确定单词的大小,第二个数字确定行的大小
- 编写代码将给定的数字转换为单词(例如1234作为输入应输出一千二百三十四)
- Regexp,用于带有数字的特定单词
- 生成由字母和数字组成的随机单词
- C++将包含单词和数字的字符串转换为数字
- String Stream in C++ 解析单词和数字字符串
- 将 3 位数字转换为单词C++