Losowanie hasła

2018-12-04 15:24
0

Witam, chciałbym zrobić program, który wczyta mi z pliku jedno losowe hasło i wyświetli je na ekranie, nie mam zielonego pojęcia jak to zrobić. Utknąłem na etapie wypisywania wszystkie z pliku i nie mogę użyć funkcji rand() bo mój string nie jest int`em a nawet jeśli bym go użył konwertując mojego stringa poprzez funkcję atoi to mój string jest całym plikiem a nie tylko jednym zdaniem...
[PATRZ ZAŁĄCZNIK]

xdadsada.png

edytowany 4x, ostatnio: kq, 2018-12-04 15:42

Pozostało 580 znaków

2018-12-04 15:43
2

Najprościej byłoby za każdym getline zwiększać sobie jakiś licznik i jeśli osiągnie on zadaną wartość (oznaczającą numer linii którą chcemy wypisać), to wypisujemy hasło.


Pozostało 580 znaków

2018-12-04 15:51
kq
1

Co ma rand do stringa niebędącego intem?!

Tak btw: https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/

W przypadku większej liczby haseł rób tak jak @pingwindyktator napisał, jak jest ich mało i są małe to trywialniej będzie wczytać wszystkie do wektora i wybrać losowy indeks.


Pozostało 580 znaków

2018-12-04 15:58
0
    while(getline(plik,lines))
    {

        {
        cout << lines<< endl;
        }

        cout << nr_linii++ << endl;
    }

Mam licznik, tylko jak go teraz wywołać do rand`a?

Pozostało 580 znaków

2018-12-04 16:00
kq
0

Losujesz sobie pierw numer linii, a potem wyświetlasz linię, której numer jest zgodny z wylosowanym.


Pozostało 580 znaków

2018-12-04 16:07
2

raczej najpierw powinien policzyć liczbę linii, więc najlepiej jak wczyta wszystko do std::vector.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-12-04 16:08
0
#include <iostream>
#include <time.h>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
    fstream plik;
    string lines;
    int nr_linii=1;

    plik.open("hasla.txt",ios::in);

    srand(time(NULL));

    while(getline(plik,lines))
    {
        nr_linii = rand() %5 +1;
        if(nr_linii==lines)         
        {
        cout << lines<< endl;
        }

    }

    plik.close();

    return 0;
}

Zrobiłem to w ten sposób, ale mój if nie działa.

edytowany 1x, ostatnio: furious programming, 2018-12-04 17:44

Pozostało 580 znaków

2018-12-04 16:09
kq
0

Działa, tylko bez sensu losujesz numer za każdym razem, zamiast zrobić to raz. Ponadto, zgodnie z uwagą @MarekR22, jeśli nie znasz liczby linii to musisz pierw ją i tak poznać.


Pozostało 580 znaków

2018-12-04 16:18
0
#include <iostream>
#include <time.h>
#include <fstream>
#include <cstdlib>
#include <vector>

using namespace std;

int main()
{
    fstream plik;
    string lines;
    vector <int> nr_linii;

    plik.open("hasla.txt",ios::in);

    srand(time(NULL));

    nr_linii = rand() %5 +1;

    while(getline(plik,lines))
    {
        nr_linii.push_back(++);

        if(nr_linii==lines)     
        {
        cout << lines<< endl;
        }

    }

    plik.close();

    return 0;
}

Zrobiłem to tak jak zrozumiałem, ale to kompletnie nie działa.

edytowany 2x, ostatnio: furious programming, 2018-12-04 17:44

Pozostało 580 znaków

2018-12-04 16:40
kq
0

Masz zrobić wektor wczytanych stringów, a nie intów, wylosować jakiś indeks, i go wyświetlić.

nr_linii.push_back(++);

???


edytowany 1x, ostatnio: kq, 2018-12-04 16:41

Pozostało 580 znaków

2018-12-04 16:48
0

Super, ze ktoś mi powie: zrób to używając tego i tego, jak ja nawet nie wiem jaka jest w tym logika, wiem, ze da się to zrobić bez używania vektorów, ale nie wiem jak i o to pytam. Nie umiem vektorów i pewnie żeby się ich nauczyć musiał bym je implementować do kilku programów, ale jak tego nie robiłem, to mam po omacku dawać tutaj?

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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