Forum: Offtopic arrayelemente hochzählen, nur wie?


von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hi Leutz,

ich kniffel an einem Problem herum und bekomm es irgendwie nicht hin.
Um einen Kollisionstest für einen Hash-Algorithmus zu realisieren (den 
ich zum testen für meine Login-Fkt. verwende), muss ich ein Array 
sozusagen "binär" (also mit Übertrag) hochzählen.

Also:
0...z
00...0z; 01..0z; zz..zz
000...00z; 001...01z; zzz...zzz

usw., bis ich bei einer Länge n ankomme.
Nur krieg ichs irgendwie nich hin, mir fehlt der richtige Kniff.

Hat jemand ne Idee?


VG,
/th.

von Matthias L. (Gast)


Lesenswert?

>Also:
>0...z
>00...0z; 01..0z; zz..zz
>000...00z; 001...01z; zzz...zzz


Hä?

Ich versteh nicht was du meinst

von Random .. (thorstendb) Benutzerseite


Lesenswert?

also,

binär sieht das ganze ja so aus:

0
1
10
11
100
101
110
111

usw...
Nur, dass ich nciht 0,1 sondern '0' - 'z' haben möchte als Elemente 
eines strings / arrays.

VG,
/th.

von Matthias L. (Gast)


Lesenswert?

Also du willst Strings bauen? mit folgendem Inhalt:
'0'
'1'
'2'
'3'
...
???

dann ??

> sondern '0' - 'z' haben möchte als Elemente
>eines strings / arrays.

Gib doch mal ein Beispiel wie das aussehen soll

von Uhu U. (uhu)


Lesenswert?

Erklär doch mal, was du eigentlich genau machen willst.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

ok, wird etwas länger
0
1
2
3
...
A
B
...
z

00
01
02
...
0A
0B
...
0z
10
11
...
1A
1B
...
1Z

20
21
22
...
2A
...
2z
30
...
100
101
102
...

usw...


so weit hab ichs "schon":
1
for(len=1; len<30; len++)
2
{
3
  thprintf(" %i", len);
4
      
5
  for(k=0; k<len; k++)
6
  {
7
    for(charNum=48; charNum<123; charNum++)
8
    {
9
      testStr[len-k-1] = charNum;
10
    }
11
  }
12
}

aber irgendwie baut's nur mist!

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Im Grunde brauche ich ein Konstrukt für n ineinander verschachtelte 
Schleifen...

VG,
/th.

von Uhu U. (uhu)


Lesenswert?

Du willst im 62er-System zählen? Sehe ich das richtig?

Das sollen wohl die Test-Paßworte werden?

Wieso zählst du nicht einfach binär hoch und wandelst anschließend in 
das System mit Basis 62? Dann mußt du nur eine Binär->ASCII-Wandlung 
entsprechend umbauen.

Tipps, wie man sowas macht, kannst du dir in den Quellen einer 
Binär->ASCII-Wandlungs-Routine besorgen, die nach Hexadezimal wandelt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Funktion itoa kann hier gute Dienste leisten - der nämlich kann man 
die Basis des zu verwendenden Zahlensystemes mitgeben. Allerdings habe 
ich nicht getestet, was sie ausgibt, wenn man 62 angibt.

Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man 
irgendwo finden - und den könnte man anpassen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Rufus t. Firefly wrote:
> Die Funktion itoa kann hier gute Dienste leisten - der nämlich kann man
> die Basis des zu verwendenden Zahlensystemes mitgeben. Allerdings habe
> ich nicht getestet, was sie ausgibt, wenn man 62 angibt.
>
> Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man
> irgendwo finden - und den könnte man anpassen.

A-Z und 0-9 macht 36 Ziffern.

von Anon N. (fuechslein)


Lesenswert?

Um mal etwas vor deinem Problem anzufangen:
Warum willst du denn deinen eigenen Hash Algorithmus verwenden? Das ist 
genau so eine Schnaps Idee wie seinen eigenen 
Verschluesselungsalgorithmus zu entwickeln. Das sollt man einfach 
seinlassen da man auf vorhandene Methoden zurueckgreifen sollte.
Es gibt so viele Wissenschaftler die sich dieser Probleme schon gewidmet 
haben und schon gute Hash Funktionen fuer alle moeglichen 
Anwendungsgebiete  entwickelt haben. Benutzt doch die.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> > Ah, die geht wohl nur bis 36. Aber den Quelltext der Funktion wird man
> > irgendwo finden - und den könnte man anpassen.
>
> A-Z und 0-9 macht 36 Ziffern.

Liest Du auch die Beiträge, auf die Du antwortest?

von Anon N. (fuechslein)


Lesenswert?

PS: Nur damit du dir eine "Gefuehl" bekommst wie viele Strings du 
austesten musst wenn du nur alle 1-6 stelligen PW ausprobieren willst:
2.565.726.409 (37^6)

Bist du sicher du willst das machen? Ist dein Ansatz geeignet? D.h. hast 
du so viel RAM?

Wie gesagt und dann bist du nur 6 stellig. Da kann es sein das bis dahin 
keine einzige Kollision auftaucht und dann sofort ab 8stellt (nur ein 
Bsp) Millionen von Kollisionen dir passieren. Wie gesagt: Die ganze 
Theorie ist nicht einfach und viel Prof. forschen an solchen Sachen 
Jahrzehnte lang.

von Uhu U. (uhu)


Lesenswert?

Anon Nymous wrote:
> viel Prof. forschen an solchen Sachen Jahrzehnte lang.

Aber jeder hat mal klein angefangen ;-)

von Karl H. (kbuchegg)


Lesenswert?

Random ... wrote:
> Im Grunde brauche ich ein Konstrukt für n ineinander verschachtelte
> Schleifen...

... und n ist variabel

das geht über eine Rekursion

(ungetestet)

void count( int n )
{
  if( n == 0 )
    return;

  for( int i = 0; i < irgendwas; ++i )
    printf( "%d", i );
    count( n - 1 );
  }
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.