C++ c+中的随机字符串生成器+;在循环中返回相同的值

C++ c+中的随机字符串生成器+;在循环中返回相同的值,c++,string,random,C++,String,Random,我有一个在程序中生成随机字符串的函数,它可以按照我的需要工作,但只能与循环分开。 当我在main()的循环中使用它时,它每次都返回相同的字符串(例如20)。 以下是该函数: string randomString() { string c; int r = NULL; int num = 7; srand(time(NULL)); for (int i = 0; i < num; i++) { r = rand() % 26; c += 'a' + r; } cout

我有一个在程序中生成随机字符串的函数,它可以按照我的需要工作,但只能与循环分开。 当我在main()的循环中使用它时,它每次都返回相同的字符串(例如20)。 以下是该函数:

string randomString()
{
string c;
int r = NULL;
int num = 7;
srand(time(NULL));
for (int i = 0; i < num; i++)
{
    r = rand() % 26;
    c += 'a' + r;   
}
cout << "Random string: " << c << " \n";
return c;
}
string随机化字符串()
{
字符串c;
int r=NULL;
int num=7;
srand(时间(空));
for(int i=0;icout由于这个问题被标记为
C++
,我建议使用它。与
mersenne\u twister\u引擎一起,它应该可以生成质量更好的伪随机数。你可以在链接末尾看到一个如何使用它的示例。

正如评论员指出的,
srand()
设置随机数生成器,并使用其初始值对其进行种子设定。因此,在使用
rand()
之前,每个程序只能使用一次随机数生成器


在这种情况下,对
srand()
的调用应该从
randomString()
中取出,放在第一次调用
rand()
之前的某个地方,可能在
main()中

仅在程序开始时调用
srand
一次。解释。srand每次调用时都会重置随机数生成器。这就是为什么每次都会得到相同的“random”字符串。即使将时间传递给srand,如果上次调用srand后时间不够,也会得到相同的random数字。谢谢,这就是我想要的一般建议:阅读你正在使用的东西的文档。
srand
s唯一的目的是造成你刚才看到的效果。这次你得到的随机数字不是随机的,下次可能是其他的……这并不能回答问题中出现问题的原因。问题是如果问题中出现同样的错误,m实际上也可能出现在
std::uniform_int_distribution
mersenne_twister_engine
中。同样的错误也可能发生在质量更好的prng中。同意,将更新我的答案以反映这一点。