Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.19.55.8] |
|
Сообщ.
#1
,
|
|
|
Кто расскажет как, зная длинну строки, перебрать все возможные её комбинации (возможные символы: alpha, digit, специальные. Всё в нижнем регистре)?
|
Сообщ.
#2
,
|
|
|
Теория:
Как известно спецсимволами являются символы с кодами 33-47,58-64,91-96 и 123-126. Символы латинского и русского алфавита в нижнем регистре с 97 и 224 по 122 и 255 соотв. Практика: (код приводить не буду, делай сам) Создаем массив целых, массив символьных и одну строковую переменную. Номером последнего элемента является длинна строки. Далее, в массиве целых начинаем перебор т.е. последний элемент массива последовательно изменяем от 33 до 255 (см. теорию), когда все извращения с последним элементом закончены изменяем предпоследний элемент и так далее до бесконечности () т.е. до первого символа. Паралельно с этим делаем тоже самое с символьным массивом, но с одной разницей - элементам массива присваевается значение целого массива и строковой переменной присваеваем полученный результат (символьный массив) затем выводим результат на форму (или куда там надо?). Строковую переменную обнуляем и все заново! Обычно все это "вешается" на событие по таймеру. з.ы. Схема проверенна и работоспособна! |
Сообщ.
#3
,
|
|
|
Поищи ветку brut force (здесь или в Delphi)
|
Сообщ.
#4
,
|
|
|
Сорри, z1288, но я НИХРЕНА не понял! Давай упростим задачу, ведь модель останется та же. Например напишем примитивну программу перебора числовых комбинаций (кончено с числами можно их просто увеличивать с начального до конченого на 1, и будут все комбинации, но мы усложним специально):
int main(int argc, char* argv[]) { char szsortout[5]; int i, j; for(i = 0; i <= 5; i++) { for(j = 0; j <= 9; j++) { itoa(j, &szsortout[i], 10); puts(&szsortout[0]); } } return 0; }; Ну и в чём тут проблема? В том что все комбы не перебираются, т.к по чути получатся должно так - когда присваивается первый возможный символ первого символа строки, то нужно уже делать тоже самое и со второй и т.п, понимаешь? Так же и с числами. Может я сегодня туго соображаю, но что-то совчем из того что ты сказал не понял... |
Сообщ.
#5
,
|
|
|
Ну конечно, это даже видно по тому, что у тебя 50 "комбинаций", а должно быть 10^5 . Для пяти можно сделать 5-рное вложение петлей, но я думаю, тебе это не решение . Рекуренцией тебе можно пользоваться? Если так, создай рекурсивную функцию. Это будет решение
|