#include #include #include #include typedef struct contacts{ std::string firstName; std::string lastName; int number; } Kontaktdaten; void addContact(Kontaktdaten* person, std::vector *Telefonbuch) { Telefonbuch->push_back(person); // std::vector buch = *Telefonbuch; // buch.push_back(person); } void deleteAllContacts(std::vector *Telefonbuch) { for (Kontaktdaten* pointer: *Telefonbuch) { delete pointer; } } void printAllContacts(std::vector *Telefonbuch) { for (Kontaktdaten * personpointer: *Telefonbuch) { Kontaktdaten person = *personpointer; std::cout << person.firstName << " " << person.lastName << " " << person.number << std::endl; } } void saveAllContacts(std::vector *Telefonbuch, std::string *fileName) { std::ofstream outfile; outfile.open(*fileName); for (Kontaktdaten * personpointer: *Telefonbuch) { Kontaktdaten person = *personpointer; outfile << person.firstName << std::endl << person.lastName << std::endl << person.number << std::endl; } outfile.close(); } int exponentiate(int base, int exponent) { int result = 1; while (exponent > 0) { result *= base; exponent--; } return result; } int intStringToInt(std::string input) { int result = 0; int size = input.length(); for(int i = 0; i < size; i++) { int digit = input[size - 1 - i] - '0'; // -1 to consider 0-index // -'0' to get ascii indicies right result += digit * exponentiate(10, i); // shift digit } return result; } void readContactsFromFile(std::vector *Telefonbuch, std::string *fileName) { std::ifstream infile; infile.open(*fileName); if (!infile.is_open()) { std::cout << "File does not exist" << std::endl; return; } std::string line; int counter = 0; Kontaktdaten * personpointer = new Kontaktdaten; while (std::getline(infile, line)) { int attribute = counter % 3; counter++; switch (attribute) { case 0: personpointer->firstName = line; break; case 1: personpointer->lastName = line; break; case 2: personpointer->number = intStringToInt(line); addContact(personpointer, Telefonbuch); personpointer = new Kontaktdaten; break; default: std::cout << "This should never happen" << std::endl; } } infile.close(); } void addFirstSetOfContacts(std::vector * Telefonbuch) { auto * Robin = new Kontaktdaten; auto * Saxo = new Kontaktdaten; auto * Jesus = new Kontaktdaten; Robin->number = 123456; Robin->firstName = "Robin"; Robin->lastName = "Schnaiter"; Saxo->number = 987654; Saxo->firstName = "Saxobastian"; Saxo->lastName = "Brosch"; Jesus->number = 666; Jesus->firstName = "Jesus"; Jesus->lastName = "Nazarett"; addContact(Robin, Telefonbuch); addContact(Saxo, Telefonbuch); addContact(Jesus, Telefonbuch); } void addSecondSetOfContacts(std::vector * Telefonbuch) { auto * Bruno = new Kontaktdaten; auto * Peter = new Kontaktdaten; auto * Ralf = new Kontaktdaten; Bruno->number = 462581; Bruno->firstName = "Bruno"; Bruno->lastName = "Braunbär"; Peter->number = 110; Peter->firstName = "Peter"; Peter->lastName = "Polizei"; Ralf->number = 9999; Ralf->firstName = "Ralf"; Ralf->lastName = "Rotbart"; addContact(Bruno, Telefonbuch); addContact(Peter, Telefonbuch); addContact(Ralf, Telefonbuch); } /* Kontaktdaten * createContact(std::string firstName, std::string lastName, int number) { Kontaktdaten person = new Kontaktdaten; person.firstName = firstName; person.lastName = lastName; person.number = number; return & person; } */ void Aufg3Main() { std::string fileName = "../Aufg3/IO-Files/phonebook.thorsten"; std::vector Telefonbuch; for (int i=0; i<1; i++) { readContactsFromFile(&Telefonbuch, &fileName); std::cout << "Done with reading " << i << std::endl; } /* *Robin->number = 123456; Robin->firstName = "Robin der Neue"; Robin->lastName = "Schnaiter"; Saxo->number = 987654; Saxo->firstName = "Saxobastian"; Saxo->lastName = "Broschianer"; Jesus->number = 6666666; Jesus->firstName = "Jesus"; Jesus->lastName = "Nazarett"; */ // addFirstSetOfContacts(&Telefonbuch); addSecondSetOfContacts(&Telefonbuch); // printAllContacts(&Telefonbuch); saveAllContacts(&Telefonbuch, &fileName); deleteAllContacts(&Telefonbuch); /* * IDE beschwert sich bei Erstellen von * Robin über leaked Memory * deleteAllContacts() sollte den Speicher befreien * * Zugriff auf *Robin nach delete Statement führt zu Fehler? * -> IDE ist zu dumm? */ // // std::cout << Robin << std::endl; // auto test = *Robin; // std::cout << test.firstName << std::endl; }