Probeklausur Liwanze [Hilfe bei der Supportfunktion]



  • Hallo allesamt,

    aktuell hänge ich gerade an einer Aufgabe, bei der es heißt, dass der Benutzer beliebig viele Mitglieder hinzufügen soll, unter der Bedingung, dass jede Eingabe eindeutig sein muss. Doppelte Namen sollen durch eine sinnvolle Meldung abgelehnt werden.

    Mein Quellcode ist in drei Teile getrennt (header, .cpp, main)

    Header:

    
    #ifndef LIWANZE_H
    #define LIWANZE_H
    #include <string>
    #include <vector>
    
    using namespace std; 
    
    class Liwanze {
      
            
      public:
        
        enum Region { ndef=1,  amer, apac, emea }; 
        Liwanze( string s, Region z );
        string get_Name() const;
        Region get_loc(); 
        void print(); 
        
       private:
        
        string name;
        Region loc;  
        Liwanze() = delete;  
        
    };
    
    void populate( vector<Liwanze>& vL );
    void print_LVZMembers( vector<Liwanze> vL );
    void add_Liwanze( vector<Liwanze> vL );
    
    #endif /* LIWANZE_H */
    
    
    

    .cpp

    #include "Liwanze.h"
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    Liwanze::Liwanze(string s, Region z) : name {s}, loc { z } {
    }
    
    
    string Liwanze::get_Name() const {
    
        return name;
    }
    
    Liwanze::Region Liwanze::get_loc() {
    
        
        return loc;
    }
    
    void Liwanze::print() {
    
        cout << "Liwanze: " << endl;
    
    }
    
    
    void populate(vector<Liwanze>& vL) {
    
        vL.push_back( Liwanze ("Joey", Liwanze::amer) );
        vL.push_back( Liwanze ("Johnny", Liwanze::amer) );
        vL.push_back( Liwanze ("DeeDee", Liwanze::amer) );
        vL.push_back( Liwanze ("Tommy", Liwanze::emea) );
        vL.push_back( Liwanze ("Suzy", Liwanze::apac) );
        vL.push_back( Liwanze ("Sheena", Liwanze::amer) );
    
    
    }
    
    void print_LVZMembers ( vector<Liwanze> vL ) {
        
        
        for ( unsigned int i {0U}; i < vL.size(); ++i) {
                    
            cout << vL.at(i).get_Name() << " " << vL.at(i).get_loc() << endl;
            
          
                                                       }
    
    }
    
    

    main

    #include "Liwanze.h"
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    /*
     * 
     */
    int main( ) {
        
       vector<Liwanze> vL {};
       populate ( vL );
       
       print_LVZMembers ( vL );
       
       while ( true ) {
           
           
           string x { Liwanze.get_Name() };
           
           cout << "Geben Sie ein Mitglied an";
           cin >> x;
           
           print_LVZMembers ( vL );
           
           if ( cin == "q") break;
           
           
       }
     
       
        return 0;
    }
    
    
    

    In der Header habe ich bereits die Funktion "add_Liwanze" zum hinzufügen weiterer Mitglieder angelegt, hänge jedoch bei der initialisierung in der .cpp.

    Könntet ihr mir da weiterhelfen?



  • hänge jedoch bei der initialisierung in der .cpp.

    Was für eine Antwort erwartest du auf so eine Frage?



  • Ich habe weiter dran gearbeitet und bin so weit gekommen:

    
    void add_Liwanze ( vector<Liwanze> vL) {
        
        string user {""};
        string user2 {""};
        
        
        while (cin) {
            
        cout << "Bitte geben Sie einen Namen an: ";    
        cin >> user;
        
        cout << "Bitt geben Sie noch einen Namen an: ";
        cin >> user2;
        
        if ( user == "q" || user2 == "q") break;
        if ( user2 == user || user == user2) throw runtime_error ("Keine Doppelnamen!");
        
        //cout << user << "," << user2 << endl; 
        
        vL.push_back(Liwanze ( user, Liwanze::amer));
        vL.push_back(Liwanze ( user2, Liwanze::apac)); 
        
        
        
        }
       
    

    Hänge jetzt nur noch an der Ausgabe. Mein Ansatz wäre:

    for (unsigned int i {0U}; i < vL.size(); ++i ) {
    
    cout << vL.at(i);
    
    }
    

    Da gibt es aber nun zwei Sachen auf die ich nicht komme:

    1. Wie kann ich den Benutzer auffordern, dass er auch eine Region für den jeweiligen Namen angeben muss?
    2. Wie kann ich den Namen, der als string vom Benutzer angegeben werden muss, als auch die Region, gescheit ausgeben lassen?

    @manni66 sagte in Probeklausur Liwanze [Hilfe bei der Supportfunktion]:

    hänge jedoch bei der initialisierung in der .cpp.

    Was für eine Antwort erwartest du auf so eine Frage?

    Ist der Ausdruck falsch?



  • Ist entwerder falsch oder richtig
    ich würde ein map<string,string> verwenden
    dann kannst du so abfragen ob username vorhanden ist

    if(namenliste[eingabe]==eingabe)cout<< "gibt's schon\n";
    else  namenliste[eingabe]=eingabe;
    

    kannst auch un einem normalen arry speichern nur musst du da alle einzeln vergeichen das zieht an der laufzeit

    Was du mit den Regionen willst keine ahnung



  • @Abe Die Regionen sind ja vorgegeben. Die sind die deklaration für enum, also die Bezeichnung.
    Wenn ich mir das Ergebnis ausgegeben lasse habe ich statt Region "amer", eine 2 statt "amer" stehen. Die Zahl möchte ich in einen string konvertieren.

    Liwanze::Region Liwanze::get_loc()   {
        
        switch ( loc ){
            case 1: return "ndef"; break;
            case 2: return << "amer"; break;
            case 3: return << "apac"; break;
            case 4: return << "emea"; break;
            default: return << "Keine passende Region gefunden!"; break;
            
            
        }
        return loc;
    }
    
    

    Das war mein Lösungsansatz, allerdings spuckt mir der compiler die Fehlermeldung aus: "error: cannot convert 'const char*' to 'Liwanze::Region' in return".
    Ich könnte jetzt statt return einfach die cout-funktion verwenden, aber dann hätte ich z.b.: folgende Ausgabe: "amerName 2"



  • @Suprax

      map<string,string,string> r;
        cin >> x
        cout<< wählen sie eine region aus\n;
            << 1= \n
            <<2=  \n
            <<3 = \n
            <<4 = \n
        cin >> y
            string region = deinekomischeintostring(y);
            if(r[region][x]==x)cout <<dengibtsschonda\n;
            else r[region][x]=x ;
    

    so üngefähr könnte es ausehen
    kannst auch einfach den int von Region nehemen



  • Spielt die Region für deine Fragestellung irgendeine Rolle? Was zum Geier ist eine Liwanze? Klingt eklig.

    Wo genau hängst du? Versuche mal den Quellcode soweit zu reduzieren dass man noch sieht, wo dein Problem ist, und dass es einem egal ist was eine Liwanze ist. Und wenn die Region für dein Problem keine Rolle spielt, dann lass die in deiner Fragestellung weg.



  • @Suprax sagte in Probeklausur Liwanze [Hilfe bei der Supportfunktion]:

    dass der Benutzer beliebig viele Mitglieder hinzufügen soll, unter der Bedingung, dass jede Eingabe eindeutig sein muss. Doppelte Namen sollen durch eine sinnvolle Meldung abgelehnt werden.

    Eine map und fertig ist der Lack.



  • @It0101 sagte in Probeklausur Liwanze [Hilfe bei der Supportfunktion]:

    Was zum Geier ist eine Liwanze?

    Vllt hilft das dem Dozentenf rauszufinden, wer google benutzt und wer nicht?
    Habe gerade gegen mein Bauchgefühl gesucht und rausgefunden, dass eine Liwanze eine süße Mehlspeise ist. Wer hätte das gedacht?


Anmelden zum Antworten