Skip to content

Instantly share code, notes, and snippets.

@jkamphausen
Last active May 21, 2018 16:17
Show Gist options
  • Select an option

  • Save jkamphausen/f2f43124309bf1e372122f81c05db00c to your computer and use it in GitHub Desktop.

Select an option

Save jkamphausen/f2f43124309bf1e372122f81c05db00c to your computer and use it in GitHub Desktop.
CPP2: SoSe 2018 - Aufgabe 24.04.2018 (Studentische Lösung)
#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;
}
}
#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;
}
};
#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