Generator haseł - problem z losowaniem wartości z tablicy

0

Witam, tworząc generator haseł, które według preferencji mają zawierać małe, wielkie litery, cyfry i znaki natknąłem się na problem z losowaniem wartości z tablicy.

Stworzyłem tablice:

char male[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char wielkie[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char cyfry[] = {'0','1','2','3','4','5','6','7','8','9'};
char alfa[] = {'.',',','?','!','@','#','$','%','-','_','*','^','$',};
char zbior[];

które za pomocą funcji - scanf, switch, strcpy są odpowiednio dodawane do pustej tablicy zbior, z której ma się odbywać losowanie.

Nie wiem jednak jak wykonać losowanie wartości z tablicy, a dokładniej co napisać po wyrażeniu "rand".
Proszę o pomoc.

0

Losuj indeks tablicy. Np. dla male, które mają 26 elementów, losowym elementem będzie male[rand() % 26].

Zwróć uwagę na to, że takie podejście nie daje jednorodnego rozkładu — elementy wcześniejsze będą występować częściej, jako że 26 nie dzieli RAND_MAX + 1.

0

od 1 do 6

{
 haslo += male[Random(26)+1];
}

to powinno wylosować 6-cio znakowe hasło złożone z małych liter

0

Można np. tak...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// XXX: Tu masz szkic... 

char daj_losowy_znak(char table[], size_t size) {
    return table[rand() % size];
}

int main() {
    char male[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char wielkie[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    char cyfry[] = {'0','1','2','3','4','5','6','7','8','9'};
    char alfa[] = {'.',',','?','!','@','#','$','%','-','_','*','^','$',};
   
    srand(time(NULL)); // Zasiew generatora.. 

    // XXX: Ilość danych w tablicy to wielkość tejże tablicy ( sizeof(table) ) dzielona
    // przez wielkość 1'ego elementu.
    // Niektórzy nawet makro do tego piszą ale tu już nie chciałem przesadzać.. 
    printf("Losowy znak z tablicy male[]: %c\n",
            daj_losowy_znak(male, sizeof(male) / sizeof(male[0])));
    printf("Losowy znak z tablicy wielkie[]: %c\n",
            daj_losowy_znak(wielkie, sizeof(wielkie) / sizeof(wielkie[0])));
    // .. itd..

    return EXIT_SUCCESS;
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1