生成由字母和数字组成的随机单词

时间:2015-03-09 13:18:56

标签: c++ visual-studio-2013

我在寻找代码方面的帮助。我正在做应用程序,它将从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),upperCase有50%的可能性,lowerCase有50%的机会。稍后我将这些数字通过static_cast转换为char。  现在我只将这些名字写入文件,我可以看到它没有按预期工作。如果我只是编译这段代码,它正在写入类似

的文件

bbbbbb rrrrrr YYYYYY vvvvvv UUUUUU EEEEEE rrrrrr 但是,当我逐步调试它时,它应该是正常工作,我得到随机字母。 11次尝试后,There是我的文件,第8行和第11行是逐步调试的结果。

2 个答案:

答案 0 :(得分:1)

你的程序似乎太快了。如果您调试代码时间过程,并且随机数生成器(RNG)从您的操作系统获得不同的时间点。 RNG使用当前时间来传递伪随机数。

您可以使用c++11 standard pseudo random number generation中的RNG。 RNG对象实例化一次,并在循环的每个循环中提供不同的随机数。

答案 1 :(得分:1)

不是在每次调用random函数时播种RNG,而是在该类的构造函数中执行一次,然后在类成员函数中存储和重用生成器。出现问题是因为如果它们以相同的时间戳播种,则会生成相同的结果,因此您可以在同一秒内多次调用该函数。使用C ++ 11随机库时,您甚至不应该使用时间戳作为种子。