@MarekR22: w zasadzie czemu nie? W sumie problem jest ze splitem, bo trzeba go skądś wziąć albo samemu napisać.
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
using namespace std;
// Split jakich pełno w sieci.
// Wziąłem pierwszy lepszy przykład, może niezbyt optymalny.
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 question
{
string text;
char correct_answer;
vector<string> variants;
};
class test
{
private:
vector<question> questions;
public:
void read_questions(const char* path)
{
ifstream file(path);
if (file.is_open())
{
string line = "";
while (getline(file, line))
{
question question;
vector<string> split = split_by(line, ';');
question.text = split[0];
question.correct_answer = split[1][0];
for (size_t i = 2; i < split.size(); ++i)
{
question.variants.push_back(split[i]);
}
questions.push_back(question);
}
file.close();
}
}
void print()
{
for (size_t i = 0; i < questions.size(); ++i)
{
cout << "Question: " << questions[i].text
<< "\nAnswer: [" << questions[i].correct_answer << "]"
<< "\nVariants:\n";
char iter = 'a';
for (size_t j = 0; j < questions[i].variants.size(); ++j)
{
cout << iter++ << "). " << questions[i].variants[j] << "\n";
}
cout << "\n";
}
}
};
int main()
{
test t;
t.read_questions("questions.txt");
t.print();
return 0;
}
Plik:
Winamp sluzy do:;a;odtwarzania muzyki;kompresji plikow;tworzenia grafiki
Winrar sluzy do:;c;tworzenia grafiki;odtwarzania muzyki;kompresji plikow;tworzenia animacji
Output:
Question: Winamp sluzy do:
Answer: [a]
Variants:
a). odtwarzania muzyki
b). kompresji plikow
c). tworzenia grafiki
Question: Winrar sluzy do:
Answer: [c]
Variants:
a). tworzenia grafiki
b). odtwarzania muzyki
c). kompresji plikow
d). tworzenia animacji