Last active
May 21, 2018 16:17
-
-
Save jkamphausen/f2f43124309bf1e372122f81c05db00c to your computer and use it in GitHub Desktop.
CPP2: SoSe 2018 - Aufgabe 24.04.2018 (Studentische Lösung)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| using namespace std; | |
| #include "zeichenkette4.h" | |
| int main(){ | |
| ClZeichenkette zk1, zk2, zk3; | |
| cout << "Bitte geben Sie eine beliebig lange erste Zeichenkette ein:"; | |
| cin >> zk1; | |
| cout << "Bitte geben Sie eine beliebig lange zweite Zeichenkette ein:"; | |
| cin >> zk2; | |
| zk3 = zk1 + zk2; | |
| /* Soll so implementiert werden, dass '+' als 'Verkettung' definiert ist. | |
| D.h.: Aus den Ketten 'abc' + 'def' wird: 'abcdef' */ | |
| cout << zk1 << " + " << zk2 << " = " << zk3 << endl; | |
| { // tl;dr | |
| int x; | |
| cin >> x; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <string.h> | |
| #include <stdexcept> | |
| class ClZeichenkette { | |
| private: | |
| char *text; | |
| int laenge; | |
| void verbinde ( const ClZeichenkette &zk1, const ClZeichenkette &zk2 ); | |
| void ladeZk ( istream &eingabe); | |
| public: | |
| ClZeichenkette() { text=NULL; laenge=0; } // Konstruktor ist da! - Regel1, Check! | |
| ClZeichenkette(const char *anfangswert); // Copy Konstruktor ist da! - Regel2, Check! | |
| ClZeichenkette (ClZeichenkette *kopierVorlage) { // Copy Konstruktor ist da! - Regel2, Check! | |
| // gebe ClZeichenkette-Funktion ein bestehendes Objekt mit, um Copy-Constructor zu aktivieren | |
| laenge = kopierVorlage->laenge; // kopiere Länge | |
| text = new char [laenge+1]; // kopiere text-array | |
| text = kopierVorlage->text; // kopiere array-inhalt | |
| } | |
| ClZeichenkette & operator= (const ClZeichenkette & zk2) { // Overloaded Operator mit copy constructor! - Regel3, Check! | |
| // wenn Objekte nicht übereinstimmen | |
| if (this != & zk2){ | |
| laenge = zk2.laenge; // kopiere Länge | |
| // Exception abfangen - Regel 5 | |
| try { | |
| text = new char [laenge+1]; // kopiere text-array | |
| } catch (out_of_range) { | |
| cout << "Fehler, Out of Range!" << endl; | |
| } | |
| text = zk2.text; // kopiere array-inhalt | |
| } | |
| return *this; | |
| } | |
| ~ClZeichenkette() = default; // Destruktor für alle Elemente, die mit new initialisiert werden - Regel 4, Check! | |
| /* | |
| ~ClZeichenkette() {// Destruktor zweiter Versuch - nicht eingesetzt, da er sonst den Wert text unauslesbar macht | |
| delete text; | |
| } | |
| */ | |
| char *kette() { return text; } | |
| int anzahl() { return laenge; } | |
| friend ostream & operator << (ostream &ausgabe, ClZeichenkette &zk) { | |
| ausgabe << zk.text; | |
| return ausgabe; | |
| } | |
| friend istream & operator >> (istream &eingabe, ClZeichenkette &zk) { | |
| zk.ladeZk(eingabe); | |
| return eingabe; | |
| } | |
| ClZeichenkette operator+ (const ClZeichenkette & zk2){ | |
| ClZeichenkette neuzk; | |
| neuzk.verbinde(*this, zk2); | |
| return neuzk; | |
| } | |
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <string.h> | |
| using namespace std; | |
| #include "zeichenkette4.h" | |
| #include <stdexcept> | |
| ClZeichenkette::ClZeichenkette(const char *anfangswert) { // Copy Konstruktor ist da! - Regel2, Check! | |
| laenge=strlen(anfangswert); | |
| text=new char[laenge+1]; | |
| strcpy(text,anfangswert); | |
| } | |
| void ClZeichenkette::verbinde(const ClZeichenkette &zk1, const ClZeichenkette &zk2) { | |
| laenge=strlen(zk1.text)+strlen(zk2.text); | |
| text=new char[laenge+1]; | |
| strcpy(text,zk1.text); | |
| strcpy(text+zk1.laenge,zk2.text); | |
| } | |
| void ClZeichenkette::ladeZk(istream &eingabe) { | |
| int i; | |
| char buffer[100]; | |
| // Zeilenweise einlesen | |
| for (i=0;i<99;i++) { | |
| // get input as array | |
| eingabe.get(buffer[i]); | |
| if (buffer[i]=='\n') break; | |
| } | |
| buffer[i]='\0'; | |
| laenge=i; | |
| text=new char[i+1]; | |
| strcpy(text,buffer); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment