Я хочу создать случайную строку длины m * j, где m = 4, j = 3, например. Я сделал этоСоздать случайную строчку с ограничениями в C++
static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return alphanum[rand() % stringLength]
Я держал StringLength = 3, так что возвращаемое значение состоит только из первых трех алфавитов (A, B, C), в случайном порядке длины 20
что я хочу теперь нужно иметь случайную строку, которая имеет A всего 3 раза B всего 4 раза и C всего 3 раза. Как применить эти ограничения? Счетчики?
Hi, Я сделал что-то подобное, как предлагалось в ответе. Вот код
static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//Function which generates a random character
char GetRandom(int Position){
return alphanum[rand() % Position];
}
//******************************************************************************
// MAIN
//******************************************************************************
int main()
{
//Assuming a 3 machines 3 jobs scenario. So chromosome
int Jobs=4;
int Machines=3;
int ChromLength=Jobs*Machines;
int StringLength=Jobs;
int Counter[Jobs],i;
char C;
char Chromosome[(ChromLength-1)];
//Seeding
srand(time(0));
//Init array
for(int Cnt=0;Cnt<Jobs;Cnt++)
Counter[Cnt]=0;
//Test
//Fill the array
for(i=0;i<ChromLength;)
{
//Get the Character
C=GetRandom(StringLength);
cout<<"Char:"<<C<<endl;
//Check which character is returend
for(int j=0;j<StringLength;j++)
{
if(C==alphanum[j])
{
Counter[j]++;
cout<<"I am in J "<<j<<" Char:"<<C<<endl;
if(Counter[j]==Jobs)
break;
else
{
Chromosome[i]=C;
cout<<"I:"<<i<<endl;
i++;
}
}
}
}
cout<<Chromosome;
return 0;
}
Но выход имеет некоторые символы хвостовых не могут понять, что они Вот скриншот
Почему дд добавить теги C и объектно-ориентированного программирования? – ThiefMaster
Причина, по которой у вас есть барахло в конце строки, вы не завершаете NULL. –
Спасибо @RetiredNinja Теперь я получаю правильный результат :-) – 8A52