Witam!
Znalazłem ostatnio taki kod i chciałbym się dowiedzieć jak, bądź gdzie, ustawić limit generowanych znaków.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>
using namespace std;
const char * genText(int max, bool potasuj = true) {
/*
* Funkcja generuje losowy ciąg.
* -argument max to długość wygenerowanego ciągu
* -argument potasuj aktywuje dodatkowe przemieszanie ciagu (domyslny argument)
*/
//Cztery tablice z roznymi typami znakow. Mozna modyfikowac!
char tab0[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char tab1[] = "0123456789";
//Tablica flag z uzytymi juz tablicami. Zapewnia rownomierny rozklad uzycia wszystkich tablic z znakami podobna ilosc razy)
bool vistTab[] = {0, 0, 0, 0};
//Zwracany ciag
string buffor;
srand(time(NULL));
//Petla generowania znak po znaku
for (int i = 0; i < max; i++) {
//Sprawdz czy wszystkie 4 tablice juz uzyte byly, jesli tak to zezwol ponownie na wylosowanie wszystkich tablic
if (vistTab[0] == true && vistTab[1] == true)
vistTab[0] = vistTab[1] = false;
//Sprawdz czy wylosowany typ tablicy nie byl juz wykorzystywany, jak byl to losuj inna
int randTab;
do {
randTab = rand() % 4;
} while (vistTab[randTab] == true);
vistTab[randTab] = 1;
int sizeTab = 0;
int nr;
//Zaleznie od wylosowanej powyzej tablicy ze znakami, losuje z niej znak i dopisuje go do buffora
switch (randTab) {
case 0:
sizeTab = sizeof (tab0) / sizeof (tab1[0]) - 1;
nr = rand() % sizeTab;
buffor += tab0[nr];
break;
case 1:
sizeTab = sizeof (tab1) / sizeof (tab1[0]) - 1;
nr = rand() % sizeTab;
buffor += tab1[nr];
break;
}
}
//------------------------------------------------
return buffor.c_str();
}
int main() {
cout << genText(64, true);
return 0;
}