verzweifle an diesen C++ Aufgaben :-(



  • Hallo an euch c++ Profis,

    ich sitz hier überwältigt von der c++ Vielfalt an einer Reihe Aufgaben, bei der mir nicht einleuchtet, wie ich diese aufzubauen habe.

    Auch mit Hilfe diverser Bücher fällt mir nicht ein, wie ich bei diesen Aufgaben vorzugehen habe.
    Ich tue mir eben schwer, dort einen Einstiegpunkt zu finden 😞
    Ich würd mich freuen, wenn jmd. so gnädig wäre und mir vielleicht eine Art Grundgerüst beschreiben könnte, was ich alles zur Realisierung brauche und wenns nicht ganz so viel Mühe macht, ein bisschen an Codebeispielen erklärt.

    Ich bedanke mich schonmal recht herzlich!!!

    *******************************************************************************

    a) Implementiere eine der main-Funktion äquivalente Entry-Point Funktion mit strings; d.h. implementiere die Funktion:

    int funktion(const string& programName, const vector<string> &arguments);

    Die im ersten Argument den Programmnamen und im zweiten einen STL-Vektor von Kommandozeilenargumenten bekommt. Die Funktion soll nur den Programmnamen und die einzelnen Argumente auflisten.

    b)
    vereinfacht betrachtet hat die Entry-Point Funktion für Windows Oberfl.appl. die Syntax: int WINAPI WinMain (int hInstance, const char* cmdline);

    Dabei ist hInstance eine Zahl die die Windows-Appl. identifiziert und cmdline ist die vollst. Kommandozeile.
    Implementiere die WinMain-Funkt. so, dass sie die "funktion"(s.o.) aufruft.
    Der Programmname soll die Win-Appl.nr. (handle) sein.

    Schreibe Programm das einen Klassennamen als Argument übergeben bekommt und darauf hin eine header und source Datei generiert.
    Implementiere eine Fkt. create(ClassModule) die den Klassennamen übergeben bekommt. Benutze die Klasse string für die Fkt.signatur.

    Der Dateiname ist jeweils in der ersten Zeile der Datei erwähnt. Das Define für die Sentry-Konstr. besteht aus einem Unterstrich gefolgt vom Klassennamen in Großbuchstaben, gefolgt von dem String _H_INCLUDED_
    Der Copyright-Vermerk steht in einer Datei Copyright.txt im gleichen Verzeichnis.
    *******************************************************************************



  • Da wir grundsätzlich ungern Hausaufgaben machen, frage ich zunächst mal, wo ist das grundsätzliche Problem bei Aufgabe a? Du sollst eine Funktion schreiben, die auf den angegebenen Funktionskopf horcht.

    int funktion(const string& programName, const vector<string> &arguments);
    

    Verstehst Du alles, was dort an Typen benutzt wird? Weisst Du, wie eine solche Funktion später aufgerufen würde? Wenn nein, macht es nicht viel Sinn über die Implementierung nachzudenken.

    Grundgerüst:

    int funktion(const string& programName, const vector<string> &arguments)
    {
      return 0;
    }
    

    Was soll diese Funktion nun machen? Sie soll den Programmnamen und die Argumente ausgeben. Wie man etwas auf den Bildschirm ausgibt weisst Du, oder? Wenn nicht ➡ Grundlagen.

    int funktion(const string& programName, const vector<string> &arguments) 
    {
      cout << "Programmname: " << programName << endl;
      return 0;
    }
    

    Danach sollen die Argumente ausgegeben werden. Zugegeben, hier wird es schon kniffliger, aber je nach Kenntnisstand (Indizierung, Iterator) sollte es auf jeden Fall machbar sein. Ich mache es einfach mal mit direkter Indizierung, da ich keine Iteratoren voraussetze

    int funktion(const string& programName, const vector<string> &arguments)
    {
      cout << "Programmname: " << programName << endl;
      for (int i = 0; i < arguments.size(); ++i)
      {
        cout << i << "tes Argument: " << arguments[i] << endl;
      }
      return 0;
    }
    

    Das war ein kleiner Exkurs zum Thema Herangehensweise.

    Und der Vollständigkeit halber hier auch noch ein Hauptprogramm um das ganze zu testen:

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    int funktion(const string& programName, const vector<string> &arguments) 
    {
      cout << "Programmname: " << programName << endl;
      for (int i = 0; i < arguments.size(); ++i)
      {
        cout << i << "tes Argument: " << arguments[i] << endl;
      }
      return 0;
    }
    
    int main(int argc, char *argv[])
    {
      vector<string> args(argc - 1);
      copy(argv + 1, argv + argc, args.begin());
      return funktion(argv[0], args);
    }
    

    Alles ungetestet.



  • danke für die Tipps.
    Vom Funktionsumfang hab ich mir wohl bei a) mehr Code vorgestellt, was mich dann auch verwirrt hat, aber so sieht das ja recht einfach aus 🙂

    bei b) und 2) fehlt mir leider immer noch die Herangehensweise, deshalb hoff ich auf weitere Tipps.



  • wäre super, wenn mir noch etwas weitergeholfen werden würde. Dann kann ich morgen an meinem "richtigen" PC mit Compiler und Co. weiterarbeiten.

    Ich danke nochmal!!!



  • zu 2:

    durch das oben beschriebene weißt du, das in dem vector die argumente stehen, die übergeben wurde!

    also werte die argumente aus dem vector aus, und erstelle damit eine .h und .cpp datei!

    hoffe du hast kentnisse über fstreams?

    Beispiel, wenn du dein Programm über die eingabeaufforderung so startest:

    c:\DeinProjektOrdner\DasProgramm -Dateiname
    

    dann in main:

    int main(int argc, char* argv[])
    {
     //argc == 2, da ersters Argument Programmname und 2 Argument == -Dateiname
     //argv[0] = Programmname
     //argv[1] = "-Dateiname";
    
     //nun kannst du damit weitermachen, dateien erstellen mit dem in argv[1] übergebenen String
    
      return 0;
    }
    


  • zu 1b: wie die Programmparameter an die WinMain übergeben werden, steht doch schon in der Aufgabe. Nun mußt du sie nur noch auseinandernehmen - und dazu helfen die string-Methoden find() und substr().

    (und wie du aus der int hInstance einen String machen kannst, erfährst du in der FAQ unter "Zahl nach String und zurück")


Anmelden zum Antworten