Groß-und Kleinbuchstaben von char-Elementen zählen



  • Danke für eure Hilfe. Ich glaube ich lasse es mit dem new Operator sein. Ich glaube es wäre jetz ein sehr großer Aufwand sowohl geistig als auch körperlich. Zudem stecken meine Kenntnisse über diesen new Operator noch in der Kinderschuhen.

    @wrock

    die Zeilen 27-40 überprüfen, welche Buchstaben in beiden char[]-Elementen vorkommen. Sollte beispielsweise der Buchstabe 'a' in beiden enthalten sein, gibt er diesen Buchstaben und dessen Position aus Beispiel:

    "a befindest sich in 'Baum' an der Position 2, in 'was' an Position 2"

    da nur das a in beiden vorkommt, wird das a ausgegeben.

    Hoffentlich lässt der Prof das ganze ohne new Operator durchgehen, schließlich tut es exakt das was er von uns verlangt.



  • vatan89 schrieb:

    ich habe hier ein Programm geschrieben, welches von einem Char-Element die Groß-kleinbuchstaben, ziffern und sonderzeichen zählen und ausgeben soll. Zu der Aufgabenstellung wurde dazu gesagt, dass ich die beiden char- Elemente (one,two) mit einem new Operator verwalten soll. Ich hab jetz seit 2 Tagen überlegt wo ich wie ein new einfüge, aber das Programm funktioniert ohne dieses new auch sehr gut. Wisst ihr wie ich hier ein new implementieren kann ?

    Gar nicht. Das ist richtig - new ist hier völlig Fehl am Platz. Besser wäre natürlich gleich ein std::string , aber naja.
    Edit: Nagut, völlig nicht - die Idee, dass die Zeichenkette variable Länge haben soll, ist aber in C++ durch std::string implementiert (wie mein Vorposter schon erläutert hat), nicht wie in C durch manuelle Speicherverwaltung.

    Soweit ich weiß, wendet man den new Operator in Zusammenhang mit Zeigern an, um einen Platz im Headspeicher zu reservieren. Ich habe aber überhaupt keine Zeiger.

    Supi! Genau. Naja, fast. 👍

    Ich würde das Programm gerne so abgeben, aber ich bin mir halt sehr unsicher, ob mein Prof das so haben will :S

    Dein "Prof" ist, leider Gottes wie einige andere Profs auch, ein wahrer C-Programmierer. 👍



  • String wäre definitiv besser gewesen allein schon auf Grund der Tatsache, dass es weniger Aufwand gewesen wäre, schätze ich mal.

    Nur leider stand in der Aufgabenstellung, dass es mit char bewältigt werden muss.

    Danke euch, drückt mir die Daumen.



  • {quote]Dein "Prof" ist, leider Gottes wie fast alle anderen auch, ein Trottel.[/quote]

    wasn das für ne blöde aussage?


  • Mod

    wrock schrieb:

    Dein "Prof" ist, leider Gottes wie fast alle anderen auch, ein Trottel.

    wasn das für ne blöde aussage?

    Sone definiert die Fähigkeiten eines Menschen eben nur nach der Tiefe von dessen idiomatischem Verständnisses von modernem C++.



  • wrock schrieb:

    Dein "Prof" ist, leider Gottes wie fast alle anderen auch, ein Trottel.

    wasn das für ne blöde aussage?

    Tut mir Leid, das ist doof formuliert. Besser?



  • don't feed the trolls was?

    weis ja nicht mit welchen leuten du so rumggurgst aber....
    das man am anfang des "Programmierer-lebens" die halbe stl manuell nachprogrammiert ist fast überall so
    (mal davon abgesehen das in diesem Fall die Aufgabenstellung wirklich n bisschen ungeschickt ist)



  • wrock schrieb:

    weis ja nicht mit welchen leuten du so rumggurgst aber....

    Mit niemandem. Das Forum ist natürlich die einzige "Kontaktstelle".

    das man am anfang des "Programmierer-lebens" die halbe stl manuell nachprogrammiert ist fast überall so

    Nö, bei mir nicht. Aber oft ist das so, da hast du Recht. Trotzdem sollte man da vorerst new komplett abhandeln und alle Tricks und Tücken begreifen bevor man std::string (auch wenn nur primitiv) nachprogrammieren möchte.



  • wrock schrieb:

    das man am anfang des "Programmierer-lebens" die halbe stl manuell nachprogrammiert ist fast überall so

    http://kera.name/articles/2010/08/it-is-not-called-the-stl-mmkay/



  • vatan89 schrieb:

    Zu der Aufgabenstellung wurde dazu gesagt, dass ich die beiden char- Elemente (one,two) mit einem new Operator verwalten soll.

    Man kann das sicherlich einfacher machen als ich anfangs schrieb.
    Z.B. kann man zwei Speicherbereiche fester Länge allozieren und versuchen passend einzulesen. Dann ist es nicht allzu kompliziert - aber auch schon etwas tückischer.

    Kann sein, dass der Prof. Euch mit den Zeigern auf's Glatteis führen will, muss aber nicht.

    #include <iostream>
    
    // Unvollstaendig - C++03 Version
    class gadget{
      char *s1_, *s2_;
    public:
      gadget() : s1_(0), s2_(0) {
        s1_ = new char[50]();
        s2_ = new char[50]();
      }
      ~gadget() { delete[] s1_; delete[] s2_; }
    
      gadget& operator=(const gadget&); // Zuweisungsoperator fehlt!
      gadget(const gadget&);            // Kopierkonstruktor fehlt!
    
      void read(){
        using namespace std;
        cout << "Geben sie 2 Strings ein (je 49 Zeichen max.): ";
        cin.getline(s1_, 50, '\n');
        cin.getline(s2_, 50, '\n');
        if( !cin ){
          cerr << "Something bad happened.\n";
        }
      }
    
      const char* s1() const { return s1_; }
      const char* s2() const { return s2_; }
    };
    
    int main(){
      gadget g;
      g.read();
      std::cout << "s1: " << g.s1() << "\n"
        "s2: " << g.s2() << '\n';
    }
    

    Die mit "xyz fehlt" markierten Zeilen kannst Du auch ganz weglassen.
    Auf keinen Fall darfst Du jedoch solch ein Objekt kopieren, oder zuweisen, bevor Du die beiden fehlenden Funktionen implementierst.

    void f(){
     gadget g, gg;
     g=gg; // Fehler (Zuweisung)
     gadget ggg(g); // Fehler (Kopie)
    }
    

  • Mod

    Furble Wurble schrieb:

    s1_ = new char[50]();

    Och nö! Das ist doch bewusste Fehlinterpretation der Aufgabenstellung. So schwer ist das nun auch nicht, einen std::string nachzuprogrammieren, wenn man nicht auf Performance achtet und nur die wichtigsten Teile der Schnittstelle bereit hält (also nur ein vector<char> + Leseoperationen und ohne vollständiges STL-Interface). Sollte sich in deutlich < 100 Zeilen (Leseoperationen nicht mitgezählt) erledigen lassen und ist dann auch richtig, ganz ohne Tricks. Dann noch einen Streamoperator und ein getline (~20-30 Zeilen) und die Aufgabenstellung lässt sich damit ganz bequem und robust erfüllen, so als ob man gleich std::string genommen hätte.



  • SeppJ schrieb:

    Furble Wurble schrieb:

    s1_ = new char[50]();

    Och nö! Das ist doch bewusste Fehlinterpretation der Aufgabenstellung.

    Bewußt im Sinne von "Ich ärger mal die Mädels im Forum! Hehehe..."?
    Nein.
    Eigentlich wollte ich nur die Arrays aus vatan89s Lösung ersetzen. Und dabei auf Reallokation etc. pp. verzichten - weil ich bezweifle, dass das die Aufgabe ist.



  • Furble Wurble schrieb:

    Bewußt im Sinne von "Ich ärger mal die Mädels im Forum! Hehehe..."?
    Nein.

    Wie auch? Das einzige "Mädel" das es hier AFAIK gibt, ist elise, und die hab ich noch nie hier gesehen.



  • wrock schrieb:

    achja und anstatt

    ten= strlen(one);
    
    for(int i=0; <=ten; i++)
    

    kann man auch

    for(int i=0; i<strlen(one); i++)
    

    schreiben

    Kann man - allerdings mit quadratischem Aufwand im Bezug auf die String-Länge + strlen() wenn der Compiler die Funktion nicht kennt, da bei jedem Scchleifendurchlauf die Stringlänge neu berechnet wird - also eine ganz schlechte Idee.


Anmelden zum Antworten