Mehrere vector<int> Container erzeugen



  • Hi Helenchen,

    so ganz übeflüssig sind die 3 weggelassenen Funktionen nicht. Machklein sorgt dafür, dass auch fehlerhafte Groß/Kleinschreibung richtig erkannt wird, und der Rest soll Dir einfach ersparen die entsprechenden Funktionen Vergleich und Ausgabe unnötig aufzublähen. Aber wenn's funktioiert ist ja erst mal OK. Abher ich bin z.B. mit 177 Zeilen ausgekommen.

    Hier mal meine erste Version zu dem Thema:

    #include <iostream>
    #include <string>
    #include<vector>
    #include <stdexcept>
    #include <cctype> // tolower
    #include <algorithm> // transform
    
    using namespace std;
    
    class WoTag
    {
        private:
            string MachKlein( string Wert );
            int Vergleichen( string TagName );
            void Ausgeben( vector <int> Wochentag, string WTName );
            int Fehlers;
            string Tag, TagKurz, E_Tag;
            int Nummer;
            vector <int> Mo, Di, Mi, Do, Fr, Sa, So;
        public:
            WoTag();
            int Eingabe();
            void Vergleich();
            void Ausgabe();
            string get_name();
            WotagInit();
    };
    
    WoTag::WoTag( )
      : Fehlers ( 0 ),
        Nummer  ( 0 ),
        Tag     ( "" ),
        TagKurz ( "" ),
        E_Tag   ( "" )
    {
    }
    
    int WoTag::Vergleichen( string TagName )
    {
       Tag = MachKlein( TagName );
       TagKurz = Tag.substr( 0, 2);
       if ( ( E_Tag == Tag ) || ( E_Tag == TagKurz ) )
       {
           return 1;
       }
       else
       {
           return 0;
       }
    }
    
    int WoTag::Eingabe()
    {
       cout << "Gib jeweils Wochentag und Nummer an Ende mit q " << endl; // wie z.B. 2*3+4;
       cin >> E_Tag;
       E_Tag = MachKlein( E_Tag );
       if ( E_Tag == "q")
       {
         return 0;
       }
       else
       {
           cin >> Nummer;
           return 1;
       }
    }
    
    void WoTag::Vergleich()
    {
      if ( Vergleichen( "Montag" ) )
      {
        Mo.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Dienstag" ) )
      {
        Di.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Mittwoch" ) )
      {
        Mi.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Donnerstag" ) )
      {
        Do.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Freitag" ) )
      {
        Fr.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Samstag" ) )
      {
        Sa.push_back( Nummer );
      }
      else
      if ( Vergleichen( "Sonntag" ) )
      {
        So.push_back( Nummer );
      }
      else
      {
        Fehlers++;
      }
    }
    void WoTag::Ausgeben( vector <int> Wochentag, string WTName )
    {
        int n     = 0;
        int Summe = 0;
        cout << WTName << ' ';
        for ( n = 0; n < Wochentag.capacity( ); n++ )
        {
           Summe +=  Wochentag[ n ];
           cout << Wochentag[ n ] << ' ';
        }
        if ( Wochentag.capacity( ) == 0 )
        {
            cout << "Durchschnitt: 0" << endl;
        }
        else
        {
            cout << "Durchschnitt: " << Summe / (double) Wochentag.capacity( ) << endl;
        }
    }
    
    void WoTag::Ausgabe()
    {
      Ausgeben( Mo, "Mo" );
      Ausgeben( Di, "Di" );
      Ausgeben( Mi, "Mi" );
      Ausgeben( Do, "Do" );
      Ausgeben( Fr, "Fr" );
      Ausgeben( Sa, "Sa" );
      Ausgeben( So, "So" );
      cout << "Fehler: " << Fehlers << endl;
    }
    
    string WoTag::MachKlein( string Wert )
    {
        string Temp = Wert;
        transform(Temp.begin(), Temp.end(), Temp.begin(), ::tolower);
        return Temp;
    }
    
    void warte()
    {
        string s, s1 = "Test";
        cin.ignore();
        getline(cin, s);
    
        s.compare( s1.substr( 0, 2) );
    }
    
    int main()
    {
        class WoTag Wo_Tag;
        try
        {
            while ( Wo_Tag.Eingabe( ) )
            {
                Wo_Tag.Vergleich( );
    
            }
            Wo_Tag.Ausgabe( );
            warte();
            return 0;
        }
        catch (const runtime_error& re)
        {
            cerr << "Fehler: " << re.what() << endl;
            warte();
            return -1;
        }
    }
    

    Kann man auch noch jede Menge dran optimieren, z.B. Parameter by Referenz übergeben...
    Tut aber auch seine Pflicht.

    Gruß Mümmel


Anmelden zum Antworten