Witam, mam problem z losowaniem vectora, gdyż jak próbuje losowań jedynym znanym mi sposobem to losuje mi zawartość odpowiedzi.
przykład: Odpowiedzi to a) monitor b) myszka c) komputer d)stacja; chcę aby wymieszało mi kolejność odpowiedzi a poniższy kod losuje mi odpowiedź np: a) nitormo
KOD:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <vector>
#include <random>
#include <ctime>
#include <iterator>
using namespace std;
std::vector<std::string> split_by(const std::string& text, char sep) {
std::vector<std::string> tokens;
std::size_t start = 0, end = 0;
while ((end = text.find(sep, start)) != std::string::npos) {
tokens.push_back(text.substr(start, end - start));
start = end + 1;
}
tokens.push_back(text.substr(start));
return tokens;
}
struct pytanie {
string trescpytania;
string odpowiedzprawidlowa;
vector<string> odpowiedzi;
};
class test
{
private:
vector<pytanie> pytania;
public:
void read_questions(const char* path)
{
fstream plik(path);
if (plik.is_open())
{
string linia = "";
while (getline(plik, linia))
{
pytanie pytanie;
vector<string> split = split_by(linia, ',');
pytanie.trescpytania = split[0];
pytanie.odpowiedzprawidlowa = split[1];
for (size_t i = 1; i < split.size(); ++i)
{
pytanie.odpowiedzi.push_back(split[i]);
}
pytania.push_back(pytanie);
}
plik.close();
}
}
void print()
{
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(pytania[0].odpowiedzi[0].begin(), pytania[0].odpowiedzi[0].end(),g);
for (size_t i = 0; i < pytania.size(); ++i)
{
cout << "Pytanie: " << pytania[i].trescpytania
<< "\nOdpowiedz: [" << pytania[i].odpowiedzprawidlowa << "]"
<< "\nWarianty:\n";
char iter = 'a';
for (size_t j = 0; j < 4; ++j)
{
cout << iter++ << "). " << pytania[i].odpowiedzi[j] << "\n";
}
cout << "\n";
}
}
};
int main()
{
test t;
t.read_questions("quiz.txt");
t.print();
return 0;
}