У меня есть C++ класс Question
для хранения данных из файла questions.txt
многовариантных вопросов и ответов:Как использовать перегрузку потока ввода для вставки элемента для сопоставления элемента в классе?
обновление: Я обновил & оператор >> перегрузки оператора У меня есть один:
- он вставляет только первый вопрос с множественным выбором из двух вопросов с множественным выбором «прочитайте первый вопрос»
Данные в файле questions.txt:
A programming language is used in this Course? 3
1. C
2. Pascal
3. C++
4. Assembly
What compiler can you use to compile the programs in this Course? 4
1. Dev-C++
2. Borland C++Builder
3. Microsoft Visual C++
4. All of the above
Я пытаюсь вставить несколько ответов на карте. Я просто хочу спросить, как перегрузить operator>>
перебрать несколько ответов, чтобы вставить их в карту:
#include <string>
#include <iostream>
#include <sstream>
#include <map>
using namespace std;
class Question
{
string question;
int correctIndex;
map<int,string> answers;
friend std::istream &operator>>(std::istream &is, Question &q) {
getline(is, q.question, '?'); // stops at '?'
is>> q.correctIndex;
string line;
while (getline(is, line) && line.empty()) // skip leading blank lines
;
while (getline(is,line) && !line.empty()) // read until blank line
{
int id;
string ans;
char pt;
stringstream sst(line); // parse the line;
sst>>id>>pt; // take number and the following point
if (!sst || id==0 || pt!='.')
cout << "parsing error on: "<<line<<endl;
else {
getline (sst, ans);
q.answers[id] = ans;
}
}
return is;
}
};
int main()
{
ifstream readFile("questions.txt");//file stream
vector<Question> questions((istream_iterator<Question>(readFile)), istream_iterator<Question>());
}
Привет @Christophe У меня есть проблемы с обновлением, можете ли вы взглянуть? – NinjaDeveloper
@NinjaDeveloper Ой, извините, я был немного быстрым: первый цикл заканчивается либо, если EOF был достигнут линии, не пуст. В последнем случае (например, ваш ответ «1. C») вам нужно сначала обработать строку, прежде чем получать новую. Я обновил соответственно. – Christophe