PDA

Просмотр полной версии : [Function] Генератор строк



georJik
01.02.2015, 20:52
Очередной генератор строк или паролей, называйте его как хотите.


Работает по всем известному принципу форматирования цифры в символ и записи её в стринг.


Важно!
Использовать функцию ТОЛЬКО в паблик функции во избежание переполнения стека.


Параметры:​

rand_string(len = sizeof(str), mem_type = 1, caps = 1, start_symbol = "")
/*
len - длина генерируемой строки ( максимальный размер - 100 )
mem_type - "запоминающаяся строка", генерация по слогам
caps - учет регистра ( 0 - маленький регистр, 1 - большой, 2 - смешанный )
start_symbols[] - начальная строка ( по умолчанию пуста )
*/





Собсна сабж:


rand_string(len, mem_type = 1, caps = 1, start_symbols[] = "")
{
new str[100], dynamic_cell = -1, symbol[2], _cell, vowels_arr[6] = {65,69,73,79,85,89};
if(strlen(start_symbols) > 0) len += strlen(start_symbols);
#define vowels 65,69,73,79,85,89,97,101,105,111,117,121
do
{
start:
if(dynamic_cell == -1 && strlen(start_symbols))
{
strcat(str, start_symbols, len+1), dynamic_cell = 0;
goto start;
}
rerandom: _cell = ((caps) ? (caps > 1 ? 65+random(25) : 65) : 97) + random(25);
if((90 < _cell < 97) || (_cell == str[dynamic_cell])) goto rerandom;
if(mem_type && dynamic_cell > 1)
{
switch(str[dynamic_cell] | str[dynamic_cell-1])
{
case vowels: goto next;
default: _cell = (caps) ? (vowels_arr[random(sizeof(vowels_arr))]) : (32+vowels_arr[random(sizeof(vowels_arr))]);
}
}
next: format(symbol,2,"%c",_cell);
strcat(str, symbol, len+1);
dynamic_cell++;
}
while(dynamic_cell < len);
#undef vowels
return str;
}



Пример использования:


public Test()
{
printf("%s", rand_string(5, 1, _, "GEO_"));
return true;
}


// Пример полученного: GEO_VINIE



Автор: georJik ( я ).