提问者:小点点

创建一个随机字符串只会产生重复的字符串C++


所以我尝试过使用rand(),但每次都会导致相同的问题,所有创建的字符串都是重复的。我想问题可能来自数字生成器,但我不知道。

#include<iostream>
#include<unistd.h>
#include<fstream>
#include<string>
#include<cstdlib>
#include<time.h>
#include<random>
using namespace std;

int count;
char letter;
string word;
char ls[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'M', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(0, 51); 

string code()
{
   for (int i = dis(gen) ; count != 13; count++){
        word += ls[i];
        i = dis(gen); 
    }
    return word;

}

int main()
{
    srand(time(0));
    while(true){       
        cout << code() <<"\n";
        srand(time(0));
    }
    sleep(10);

    
}

共1个答案

匿名用户

for (int i = dis(gen) ; count != 13; count++){

当您的代码第一次调用这个函数时,这个循环将对此进行计数,直到这个达到13。这是相当简单和基本的。

但是您会惊讶地得知,当您的代码第二次调用这个函数时,仍然是上次的样子:13。为什么应该是别的什么?毕竟,在第一次和第二次调用这个函数之间,代码中没有任何东西改变它。因此,这个循环完全不做任何事情。已经是13。

此外,第一次调用该函数时,随机字母会累积到中。猜猜看?这个仍然完全相同。毕竟,没有改变或清除它。

所以这个函数在第二次被调用时不做任何事情,它只是返回相同的。每次调用它的时候它都会做同样的事情。这就是为什么你每次都得到相同的字符串。

null

null

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(创建|随机|字符串|只会|重复|字符串|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?