Beiträge von davie

    wenn du so freundlich wärst und parameter-array und übergabewert-array definieren könntest...

    deklaration einer funktion, die ein (int) array übernimmt und nichts zurückgibt:
    void foo (int []);
    deklaration einer funktion, die ein (int) array übernimmt und eines zurückgibt:
    int * foo (int []);
    - || - , die ein array einer bestimmten größe nimmt und nix zurückgibt:
    void foo (int [42])

    und damit folgende beispiel definitionen:
    void foo (int x[]) { cout << x[10]; }
    int *foo (int x[]) { x[10] = 10; return x; }
    void foo (int x[42]) { x[22] = 21; }

    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

    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