Witam,
w jaki sposób wygenerować na konsoli wszystkie kombinacje wybranych znaków?
np. (abcd) a, b, c, d, ab, ac, ad, itd.
nie chcę tutaj gotowca (chociaż nie będę zły), ale ogólne wskazówki co i jak będzie najprościej zastosować
Pozdrawiam
Witam,
w jaki sposób wygenerować na konsoli wszystkie kombinacje wybranych znaków?
np. (abcd) a, b, c, d, ab, ac, ad, itd.
nie chcę tutaj gotowca (chociaż nie będę zły), ale ogólne wskazówki co i jak będzie najprościej zastosować
Pozdrawiam
Wstaw wartości do tablicy, i zastosuj pętle.
dokumentacja obsługi tablic w bashu
http://tldp.org/LDP/abs/html/arrays.html
Jednak koledzy (przyznaję im rację) będą nakłaniali Cię do zastosowania perla, a może nawet C.
Będzie to na pewno efektywniejsze rozwiązanie, choć nie ma znaczenia, z jakiego środowiska skorzystasz, to i tak będziesz musiał zastosować tablice i pętle.
Pozdr
wg.plpo co kombinowac jak ma sie to :P
ok, mamy takie coś np.: char znaki[]= {'a', 'b', 'c', 'd', 'e'}; //i tu stoję
ale jak zrobić pętlę by generowała wszystkie możliwe kombinacje tych znaków?
Ostatnio edytowane przez grupalokalna : 02-07-2009 - 00:28
Zainspirowałeś mnie i zrobiłem coś takiego w C++, z pozoru temat prosty, ale łatwo się zamotać.
Program wyświetla kombinacje liter A,B,C,D czyli znaki w ASCII od 65 do 68, ale nic nie stoi na przeszkodzie żeby zakres znaków był większy, wystarczy zmienić przedziały.
Kombinacje dla 4 znaków zostały wyremowane, gdyż wtedy wszystkich kombinacji znaków jest tyle ,że bufor okienka konsoli jest za mały i obcina początkowe kombinacje, nie widać wtedy zasady działania programu.
Jak wywalisz znaczki /* */ i skompilujesz to sam zobaczysz.
Program skompilowałem na DevC++ ver. 4.9.9.2Kod:#include <iostream> #include <stdio.h> using namespace std; int main () { //1znak for(int litera1= 65;litera1 < 69;++litera1) { cout << (char)litera1 << endl; } //2znaki for (int litera2=65;litera2 <69;++litera2) { for(int litera1= 65;litera1 < 69;++litera1) { cout << (char)litera2; cout << (char)litera1 << endl; } } //3znaki for (int litera3=65;litera3 <69;++litera3) { for (int litera2=65;litera2 <69;++litera2) { for(int litera1= 65;litera1 < 69;++litera1) { cout << (char)litera3; cout << (char)litera2; cout << (char)litera1 << endl; } } } //4znaki /* for (int litera4=65;litera4 <69;++litera4) { for (int litera3=65;litera3 <69;++litera3) { for (int litera2=65;litera2 <69;++litera2) { for(int litera1= 65;litera1 < 69;++litera1) { cout << (char)litera4; cout << (char)litera3; cout << (char)litera2; cout << (char)litera1 << endl; } } } } */ getchar(); return 0; }
Miłej zabawy![]()
Zastosuj np. rekurencje i mozesz robic dla dowolnej dlugosci znakow... Ja przynajmniej tak robilem
też myślałem nad takimi opcjami, ale te duże ilości pętel? (to tak jakby chcieć przejść przez rzekę idąc w drugą stronę) po prostu mnie to dołowało, musi być inny sposób na to? Zapytam inaczej jesteś zadowolony z takiego rozwiązania problemu Laik707?
Zależy do jakiego zastosowania, jeśli program miał by służyć do generowania haseł to tak, gdyż złamanie hasła metodą brute force przy hasłach dłuższych niż 7 znaków jest bardzo czasochłonne, a więc napisanie takiego program do haseł o długości do 7 znaków zajmie trochę kodu ale to w zasadzie metoda kopiuj wklej i dla każdego nowego znaku dodanie 1 pętli i linijki z "cout".
Natomiast jeśli program miałby służyć do generowania kombinacji o nieskończonej długości znaków tu trzeba by się posłużyć klasami, i dziedziczeniem klas. Taka jest moja koncepcja, to jest tylko przykład i 1 z wariantów.
Jakis czas temu sam podawalem kod... http://hack.pl/forum/thread1884,md5brutepl.html
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)