Dateiinhalt in einem Array speichern

kannaum

Mitglied
Hallo,

Dieses Thema ist schon öfters vorgekommen, aber ich fand nie eine richtige Lösung, die ich verstand.
ich will ein kleines Quiz schreiben, wobei es vershciedene Themen geben soll.
Die Fragen und Antworten sind in einer Datei gespeichert.
z.b.:
Code:
Was ist die Hauptstadt von Österreich? | Wien | Salzburg | Berlin
Was ist die Hauptstadt von der Niederlande? | Amsterdam | Den Haag | Bruessel
Was ist der Regierungssitz von der Niederlande? | Den Haag | Amsterdam | Luxenburg 
Was ist die Hauptstadt von England? | London | Dublin | Washington

Die Erste Antwort ist immer die richtige.

Ich will die Datei zeilenweise in ein Array speichern und das Array dann in 4 weitere Arrays, also 1. Frage und dann noch 3 Array mit den Antworten.
Das Aufteilen, würde ich dann denke ich schaffen ,aber ich schaff es nciht zeilenweise in ein Array zu speichern.
Hat vielleicht irgendwer ein kleines Beispiel (kann ja auch nicht sonderlich lang sein)

mfg
 
Wenn du die komplette Datei einliest, kannst du sie bei einem Zeilenumbruch (\n) splitten und erhälst ein array der einzelnen Zeilen ;)
 
Ok danke sehr.
Werd dann mal nach so einem beispiel suchen, bin noch sehr unerfagren in solchen Sachen.

mfg
 
Moin,

ich würde es einfach so machen:
std::map<std::string, std::vector<std::string> >
Damit hast du als Key die Frage und als Value einen vector, dessen 1. Element (und damit Index 0) die richtige Anwort ist.

Konkret gesagt:

C++:
std::map<std::string, std::vector<std::string> > quizMap;
std::string line;
ifstream input(textfile.txt);
while(input.getline(line, 256))
{
   std::size_t pos1= line.find("|");
   std::string question = line.substr(0, pos1);
  
   std::vector<string> answers;
   std::size_t pos1= line.find("|");
   answers.push_back(line.substr(0, pos1);
   //ähnlich für restliche Antworten
  ...
   quizMap.insert( pair<std::string,vector<std::string> >(question, answers);
}
//map ist nun gefüllt

//Beispiel der Anwendung
vector<std::string> questions;
//mit Fragen befüllen, kann man oben einbauen
//Pseudo-Zufallszahl erzeugen von 0 bis questions.size() -1, diese dann als Index des Vektors verwenden
std::map<std::string, std::vector<std::string> >::iterator iter = quizMap.find(questions.at(randomNumber));
std::cout<<iter->first<<std::endl;
std::string writeAnswer = iter->second[0];
for(vector<std::string>::iterator it = iter->second.begin(); it != iter->second.end(); it++)
{
   std::cout<<(*it)<<std::endl;
}

//Abfrage der Anwort, Vergleich
...

OK, der Code ist sehr umständlich, aber ich wollte dir nur zeigen, dass es sich lohnt, sich mit Containern zu beschäftigen. Sie bieten oft die Funktionalität für alles, was man benötigt und was Arrays eben nicht bieten. Nochmal: Obiger Code ist sicher nicht optimal, aber er zeigt einige (zumindest für Beginner) interessante Aspekte von generischen Containern.


Gruß,

badday
 
Zuletzt bearbeitet:
Ok ,habe nun einen Codeausschnitt aus einem meiner Bücher teilweise übernommen, hier der Code:
C++:
int Quiz::Auswertung (string Datei) {
     string Dateiname = Datei + ".txt";
     ifstream dat_ein;
     dat_ein.open(Dateiname.c_str(), ios_base::in);
     if (!dat_ein) {
                   cerr << "Die Datei konnte nicht geoeffnet werden!" << endl;
                   return 1;
                   } 
     char DateiInhalt;
     string DateiInhalt2;              
     while (!dat_ein.eof()) {
           dat_ein.get(DateiInhalt);
           DateiInhalt2 += DateiInhalt;
           }
     cout << DateiInhalt2;
     dat_ein.close();
     
     
     }

Es kommen keine richtigen Fehlermeldungen, aber ein Build error:
C:\Quiz\Makefile.win [Build Error] [Quiz.exe] Error 1

Liegt das an dem Code, den ich gepostet habe, oder soll ich auch noch den Rest des Programmes herzeigen?
 
Kann das sein, dass du Dev-C++ verwendest?

Es könnte daran liegen, dass das Projekt irgendwie falsch eingestellt wurde oder der Ordner irgendwie schreibgeschützt ist!
 

Neue Beiträge

Zurück