I want to select a number of random words from an array to make a total amount of 36 letters.
At first I tried to select a random word and add it after checking that it’s not longer than the amount of free space we have. That was not efficient since the list would fill up and there would only be empty space left for a 2-3 letter word and it takes a long time to find such a short word.
So i decided to only choose six 6-letter words and I’m doing that by generating a random number and then incrementing it by 1 until we find a 6 letter word. It’s pretty fast, but the words aren’t really that random, often I get words that start from the same letter or only words that start with letters in sequence like a,b,c or x,y,z.
srand ( time(NULL) );
for(int i=0;i<6;i++)
{
randNumb = rand()%dictionary.size();
while(dictionary.at(randNumb).length() != 6)
{
randNumb++;
}
a << "/" << dictionary.at(randNumb) << "/";
}
I would like to choose words with different lengths but in favor of performance I’ll settle with just the 6-letter words but then i would at least want them to be more randomly selected.
The
rand()function generates a number between0andRAND_MAX.If
RAND_MAXis defined as32767, then you will not access elements in your dictionary (array?) with indices greater than that.If you need to generate a random number greater than
RAND_MAX, then think about summing the result ofncalls ofrand(), such thatn * RAND_MAX >= dictionary.size(). The modulus of this result is then guaranteed to give an index that falls somewhere in the bounds of the entire dictionary.