Lesen strukturierter Daten (war unpassender Beitrag in "C++ Strukturen in Vekotern sortieren")



  • Also ich bin gerade an einer sehr ähnlichen Übung dran.

    Ich frage ich wie ich meine Klasse / Struct in den Vector geschoben bekomme via push_back()

    Ich bekomme die einzelnen Variablen auch sauber gesplittet, da sie durch Leerzeichen getrennt sind und C++ das automatisch kann.

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <map>
    #include <iomanip>
    #include <vector>
    #include <sstream>
    #include <cassert>
    using namespace std;
    
    class Kontakt
    {
    public:
    string  id;
    string vorname;
    string nachname;
    string geburtsdatum;
    string strasse;
    string hausnummer;
    string plz;
    string ort;
    string geschlecht;
    string telefonNummer;
    string mobilNummer;
    string emailAdresse;
    };
    
    
     //#
    int main()
    {
    	vector <Kontakt> Student;
    	ifstream Inputfile("C:/Users/PC/source/repos/ConsoleApplication1/ConsoleApplication1/kontakte.txt"); // Datei öffnen in Bezug auf das Objekt
    	string zeile;
    
    	string  id;
    	string vorname;
    	string nachname;
    	string geburtsdatum;
    	string strasse;
    	string hausnummer;
    	string plz;
    	string ort;
    	string geschlecht;
    	string telefonNummer;
    	string mobilNummer;
    	string emailAdresse;
    	//while (getline(Inputfile, zeile))
    	while (Inputfile >> id >> vorname
    		>> nachname >> geburtsdatum
    		>> strasse >> hausnummer
    		>> plz >> ort
    		>> geschlecht >> telefonNummer
    		>> mobilNummer >> emailAdresse)
    	{
    		for (int i = 0; i <= sizeof(getline(Inputfile, zeile)); i++)
    		{
    	// Ist die Schleife richtig gestellt?
    	// wie kann ich hier den passenden push_back Befehl machen?
    	//meine Idee lautet (die aber nicht funktioniert):
          /* Student.push_back(Kontakt(id, vorname, nachname,
    	//geburtsdatum, strasse, hausnummer, plz, ort, geschlecht,
    	//telefonNummer, mobilNummer, emailAdresse));
    */	
    		}
    

    Könnte mir wer auf die Sprünge helfen?

    Wie schreibe ich jede einzelne Variable nacheinander in den Vector rein?



  • Deine Frage hat mit push_back oder vector nichts zu tun. Du möchtest eine Instanz von Kontakt erstellen. Das ist eine normale Struktur, du solltest eigentlich wissen, wie das geht. Danach kannst du diese in den vector einfügen.

    (In C++20 wird das so gehen, wie du es geschrieben hast, wenn ich das richtig sehe.)



  • @Bashar

    In etwa so ?:

    Kontakt New;
    Student.push_back(New);
    


  • In C++17 hat das Ding keinen Konstruktor, also kannst du den auch nicht mit Kontakt(...) aufrufen. Du kannst aber "uniform initialization" verwenden:

          Student.push_back(Kontakt(id, vorname, nachname,
    	geburtsdatum, strasse, hausnummer, plz, ort, geschlecht,
    	telefonNummer, mobilNummer, emailAdresse));
    

    =>

          Student.push_back(Kontakt{id, vorname, nachname,
    	geburtsdatum, strasse, hausnummer, plz, ort, geschlecht,
    	telefonNummer, mobilNummer, emailAdresse});
    

    Du solltest dich aber fragen ob es schlau ist so eine lange "Parameterliste" zu haben.
    (Ich weiss nicht ob der Begriff "Parameterliste" hier exakt pasend ist, weil hier kein Konstruktor aufgerufen sondern die "uniform initialization" Syntax für Aggregate verwendet wird. Aber sinngemäss ist es das selbe.)



  • Kontakt kontakt;
    
    while (Inputfile >>  kontakt.id >> ...
    
           Student.push_back( kontakt );
    

Log in to reply