Pokaż wyniki 1 do 9 z 9

Temat: Generowanie znaków w konsoli

  1. #1
    Zarejestrowany
    Dec 2008
    Postów
    15

    Domyślnie Generowanie znaków w konsoli

    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

  2. #2
    Zarejestrowany
    Sep 2006
    Postów
    1,227

    Domyślnie

    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

  3. #3
    uki
    uki jest offline
    Zarejestrowany
    Apr 2008
    Postów
    33

    Domyślnie

    wg.pl po co kombinowac jak ma sie to :P

  4. #4
    Zarejestrowany
    Dec 2008
    Postów
    15

    Domyślnie Re.

    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-06-2009 - 23:28

  5. #5
    Zarejestrowany
    Jan 2009
    Postów
    278

    Domyślnie

    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.
    Kod:
    #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;
    }
    Program skompilowałem na DevC++ ver. 4.9.9.2
    Miłej zabawy

  6. #6
    Zarejestrowany
    May 2007
    Skąd
    Kraków
    Postów
    371

    Domyślnie

    Zastosuj np. rekurencje i mozesz robic dla dowolnej dlugosci znakow... Ja przynajmniej tak robilem

  7. #7
    Zarejestrowany
    Dec 2008
    Postów
    15

    Domyślnie Laik707

    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?

  8. #8
    Zarejestrowany
    Jan 2009
    Postów
    278

    Domyślnie

    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.

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    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 :-)

Podobne wątki

  1. MySQL kodowanie znaków
    By rafal44 in forum Linux
    Odpowiedzi: 0
    Autor: 11-01-2008, 21:28
  2. Odpowiedzi: 1
    Autor: 04-17-2008, 14:55
  3. use CGI - generowanie stron (start_html)???
    By Efraim in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 11-14-2007, 20:42
  4. wszukiwanie ciągu znaków
    By ble34 in forum C/C++
    Odpowiedzi: 8
    Autor: 10-20-2007, 19:31
  5. podmiana ciągów znaków w locie
    By strzala in forum Newbie - dla początkujących!
    Odpowiedzi: 2
    Autor: 06-11-2007, 11:16

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj