Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Algorytm porównujący dwa ciągi znaków C++

blazejbaja 01 Cze 2015 22:45 921 9
  • #1 01 Cze 2015 22:45
    blazejbaja
    Poziom 4  

    Witam, interesuje mnie algorytm porównujący dwa długie ciągi znaków (100-500 znaków).
    Interesujący mnie ciąg znaków składa się z:
    -małych liter
    -dużych liter
    -liczb
    -znaków interpunkcyjnych
    -znaków specjalnych (np.: !@%^#$)

    Algorytm ma przyjmować pierwszy ciąg znaków jako stałą, do której będzie porównywać drugi ciąg znaków (zmienną).

    Chciałbym, aby algorytm sprawdzał zgodność obu ciągów i jeśli są zgodne zwracał odpowiedź np.: "Oba ciągi są zgodne", a jeśli nie np.: "Ciągi są niezgodne"

    Chciałbym, aby algorytm był uruchamiany z poziomu windowsa (np tak jak okno cmd- nie wiem jak to się fachowo nazywa).

    Nie znam się na programowaniu.
    Nie wiem jak się za to zabrać.
    (z tym C++ co w temacie to nie wiem, ale czytałem, że tak będzie najszybciej i najłatwiej to napisać)
    Może być też jako plik wsadowy systemu Windows.
    Jeśli to ważne to mój system to: Windows 8.1 64 bit.
    Byłbym wdzięczny, gdyby ktoś napisał mi taki algorytm, albo chociaż jakiś link do czegoś takiego podał, lub chociaż napisał jak coś takiego zrobić.
    Jak już wcześniej pisałem nie znam się na tym :-(.

    Potrzebuje taki algorytm możliwie szybko.

    0 9
  • #2 02 Cze 2015 13:31
    chudybyk
    Poziom 26  

    strcmp() lub strncmp() z biblioteki <cstring>
    Niemazaco.

    0
  • Pomocny post
    #3 02 Cze 2015 14:17
    -psiak-
    Poziom 32  

    @blazejbaja, w C++ masz typ string

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    @penknife, znam jeszcze lepsze podejście: - po wrzuceniu do plików, za pośrednictwem polecenia MySql.exe wrzucić te pliki do bazy zdalnej, po czym odczytać poprzez http za pomocą curł'a no i porównać je w JavaScripcie.

    2
  • #4 02 Cze 2015 14:34
    penknife
    Poziom 20  

    @-psiak- tylko nie każdy ma SQL oraz curl lub wget zainstalowanego, a do tego czym w konsoli obsłużysz JS ?

    0
  • Pomocny post
    #5 02 Cze 2015 14:34
    chudybyk
    Poziom 26  

    Wszyscy podali sposób realizacji, a nikt algorytmu.
    1. Porównuj znaki obu ciągów aż do osiągnięcia końca któregoś z ciągów.
    2. Jeśli któreś porównanie wyszło negatywnie, to wypisz "Ciągi niezgodne". Koniec.
    3. Jeśli długości ciągów nie są równe to wypisz "Ciągi niezgodne" Koniec.
    4. Wypisz "Ciągi takie same". Koniec

    Zastanawia mnie po co ktoś potrzebuje algorytmu, skoro nie potrafi go użyć, bo nie jest programistą? Zdradzisz sekret?

    1
  • #6 02 Cze 2015 17:39
    blazejbaja
    Poziom 4  

    chudybyk napisał:
    Wszyscy podali sposób realizacji, a nikt algorytmu.
    1. Porównuj znaki obu ciągów aż do osiągnięcia końca któregoś z ciągów.
    2. Jeśli któreś porównanie wyszło negatywnie, to wypisz "Ciągi niezgodne". Koniec.
    3. Jeśli długości ciągów nie są równe to wypisz "Ciągi niezgodne" Koniec.
    4. Wypisz "Ciągi takie same". Koniec

    Zastanawia mnie po co ktoś potrzebuje algorytmu, skoro nie potrafi go użyć, bo nie jest programistą? Zdradzisz sekret?



    Nie jestem programistą, ale trochę interesuję się kryptologią.
    Potrzebuje taki algorytm w celu weryfikacji autentyczności nadawcy e-maila, pliku, itd.
    To najprostszy sposób.
    Przykładowo:

    Ciąg znaków będący czyimś kodem weryfikacji ma 500 znaków i zawiera:
    -duże litery
    -małe litery
    -liczby
    -znaki interpunkcyjne
    -znaki specjalne
    (więc ogółem może zawierać max. 92 (znaki międzynarodowe) + 18 (znaki polskie) = 110 znaków

    W przypadku kiedy znaki mogłyby się w ciągu powtórzyć, lub niektóre mogłyby nie występować (tak jak w moim wypadku).

    Ilość kombinacji wynosi:

    Algorytm porównujący dwa ciągi znaków C++

    k = 110
    n = 500
    C = ?
    C = (k+n-1)!/k!(n-1)! = 609!/110!*499! = kalkulator nie wytrzymał.

    Wynik będzie oscylował w okolicach Nonyliona (10^54) lub nawet Decyliona (10^60)

    Przy tak dużej ilości kombinacji podszycie się pod kogoś (próba zgadnięcia kodu weryfikacji) jest w praktyce nie możliwa.

    To lepsze niż klucze PGP w sprawdzaniu autentyczności, bo nie trzeba programu.

    0
  • #8 03 Cze 2015 06:57
    blazejbaja
    Poziom 4  

    No faktycznie mój błąd, ale liczyłem to szacunkowo. Ten kalkulator co podałeś w linku dźwiga takie obliczenia?!
    Zapisze go sobie. (za to ci dam pomógł)

    0
  • #9 03 Cze 2015 13:47
    chudybyk
    Poziom 26  

    Od ogona pójdziemy, kota znajdziemy. ;-)
    A w jaki sposób chcesz wykorzystać 500 znakowe ciągi do autentykacji nadawcy? Dlaczego marne 500 bajtów a nie np. 500kB?
    Autentyczność porównywałbyś tylko porównując dwa ciągi? Przecież podmienić treść i skopiować ciąg to banał.
    PGP to bardzo dobre narzędzie i niełatwo znajdziesz coś lepszego.

    0
  • #10 03 Cze 2015 16:40
    blazejbaja
    Poziom 4  

    chudybyk napisał:
    Od ogona pójdziemy, kota znajdziemy. ;-)
    A w jaki sposób chcesz wykorzystać 500 znakowe ciągi do autentykacji nadawcy? Dlaczego marne 500 bajtów a nie np. 500kB?
    Autentyczność porównywałbyś tylko porównując dwa ciągi? Przecież podmienić treść i skopiować ciąg to banał.
    PGP to bardzo dobre narzędzie i niełatwo znajdziesz coś lepszego.


    Tak, ale do pgp potrzebny jest program, a to działa po skopiowaniu jednego prostego ciągu.
    A co do bezpieczeństwa to w ważniejszych sprawach używam klucza pgp.

    0