Help bei Funktionen und Stringteile ersetzen

  • http://www.pri.univie.ac.at/~itep/ws0304/hue/hue05a.html

    Tjo ich hab schon Schwierigkeiten beim lösen eines dieser Beispiele (Hauptuni- EPROG)...
    Hoffentlich kennt sich jemand auch mit C+ aus.

    Ich hab mich auf Bsp8 konzentriert.
    Das Bsp8 hört sich zwar einfach an aber damit hab ich auch schon Probleme. :(
    Ich bitte um eure Hilfe!



    Sorry ich weiss wirklich nicht mehr was zu tun ist...bin die ganze Nacht gesessen ohne Erfolg.

    Religion ist ein Glaube,
    Wissenschaft als Teilgebiet ist ein Glaube,
    die Wahrheit liegt in der Gegenwart des Menschen.

  • Tja mein erster Versuch sieht so aus:

    Das Problem is nur, das der globale String groß genug sein muss, um das Ergebnis
    zu speichern, da kein Boundary-Checking gemacht wird.

    :thumb: Geschrieben nach der alten, neuen und zukünftigen Rechtschreibung! :thumb:

  • Also...
    Zuerst einmal heftige Kritik an den Leuten, die euch das beigebracht haben, jetzt nach 5 Jahren C++ unter ISO Standardregeln..
    Der Header iostream.h sowie stdio.h sind veraltet. Tja, nix zu machen. Im "neuen" (5 Jahre alten) C++ Standard gibt es dafür die Header iostream und cstdio.

    C
    #include <iostream>
    #include <cstdio>
    using namespace std;


    Die Namen sind in den neuen Headern aber alle im Namensraum std untergebracht, also muss man sie mit einer using direktive sichtbar machen (oder mit using deklarationen, wie auch immer man es bevorzugt - oder immer explizit)

    Dann:
    zu "void main": Main muss immer "int" zurückgeben. Ebenfalls im Standard, sowohl im C als auch im C++ Standard. Es gab nie eine "void" Version in C++.
    Ein standardkonformer Compiler (zum Beispiel g++) würde den Code gar nicht erst kompilieren.

    Zum Thema globale Variablen: Ich hoffe ihr wisst, dass es eine Unart ist, sie zu benutzen.
    Wenn's nun aber vorgegeben ist, so wie hier, dann kann man nix machen.

    Ich hoffe außerdem, dass ihr die string Klasse von C++ kennt.

    IMHO eine total dumme Aufgabe: Ihr werdet immer Librarys benutzen dürfen, vor allem die vom Standard definierten. Wozu etwas programmieren, dass es schon längst gibt?!

    Zurück zum Code von Kongo.
    So eine riesige Funktion solltest du in mehrere kleine aufsplitten. Ein solches Trumm ist schwer wartbar und schlecht erweiterbar.
    Die ungarische Notation ist in C++ obsolet. Niemand sollte sie mehr verwenden.
    Aussagekräftige Namen sind 100mal besser als jedes Präfix.
    IMHO machen sie den Code nur noch schwerer lesbar.
    Außerdem verwendest du new. Ich sehe aber keine delete (bzw. delete[]). Da entstehen schnell riesige Speicherlöcher.

    Bleiben wir gleich beim Thema "erweiterbar".
    Schonmal versucht, mit deiner Version ein

    Code
    replace("ein","absolut kein");
    replace("absolut kein","ein");


    durchzuführen?
    Speicherzugriffsfehler - ist die Ausgabe auf meiner Konsole
    Da stimmt etwas nicht.

    Naja, hier ein Vorschlag von mir, um diese Aufgabe zu lösen:


    Da lässt sich allerdings sicher noch was rausholen, performancetechnisch.
    Naja, nur mal ein Denkanstoß und Mahnzeichen.

    Für Fragen:
    http://www.c-plusplus.de/forum
    Im C++ Subforum bekommt ihr eure Antworten

    cya

  • Zitat

    Die ungarische Notation ist in C++ obsolet. Niemand sollte sie mehr verwenden.

    Ich verstehe nichts von C++ und benutze auch nicht die ung. Notation, mich würde aber trotzdem interessieren warum diese in C++ obsolet sein sollen..?

  • Zitat von beefy

    Ich verstehe nichts von C++ und benutze auch nicht die ung. Notation, mich würde aber trotzdem interessieren warum diese in C++ obsolet sein sollen..?


    Sollte vielleicht besser heissen "durch C++ unnoetig geworden".
    Du hast nicht nur eine kleine Menge eingebauter Typen (char, int und zeiger darauf), sondern kannst dir eigene definieren - inklusive Vererbung und Polymorphie. Wie willst du das in der ungarischen Notation darstellen?
    IMHO ist ein aussagekraeftiger Name viele Male besser als jedes Praefix (das hab ich sicher oben auch schon gesagt)
    Objekte sollten ausserdem idR nur relativ kurz existieren. Da vergisst man den Typ schon nicht.
    Ausserdem hab ich mehr Tipparbeit.
    Verschlimmbessere mir die Lesbarkeit.
    In C++ ist es schlicht unnoetig irgendwelche Praefixe, egal ob in ungarischer Notation, fuer Klassen, oder fuer Elementvariablen einzufuehren.
    Es geht einfach nur um die (Un)notwendigkeit

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!