Losowanie hasła

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

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.

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.

0
    while(getline(plik,lines))
    {

        {
        cout << lines<< endl;
        }

        cout << nr_linii++ << endl;
    }

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

0

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

2

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

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.

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ć.

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.

0

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

nr_linii.push_back(++);

???

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