Guten Abend,
Ich soll für die Uni derzeit die String-Klasse "nachahmen". Dabei soll ich sowohl eine Klasse "String2", als auch eine Klasse "CharListenKnoten" schreiben, wobei in einem String-Objekt nur ein Pointer auf den ersten CharListenKnoten dieses Strings sein soll und in den CharListenKnoten-Objekten sind die einzelnen Buchstaben, als Einfach-verkettete Liste eingespeichert.
In einem Testprogramm versuche ich nun einen "echten" String in ein "String2" einzulesen:
Allerdings scheint es, als würde nach jedem Aufruf von append_internal() der Anker gelöscht werden, hier die Kommandozeile:
Testinput: Hallo
HalloAnker: ╠
Ich würde mich freuen, wenn mir einer von euch etwas unter die Arme greifen könnte.
LG
Ich soll für die Uni derzeit die String-Klasse "nachahmen". Dabei soll ich sowohl eine Klasse "String2", als auch eine Klasse "CharListenKnoten" schreiben, wobei in einem String-Objekt nur ein Pointer auf den ersten CharListenKnoten dieses Strings sein soll und in den CharListenKnoten-Objekten sind die einzelnen Buchstaben, als Einfach-verkettete Liste eingespeichert.
C++:
//CharListenKnoten.h:
class CharListenKnoten
{
private:
char cont;
CharListenKnoten* next;
public:
CharListenKnoten(char cont_in, CharListenKnoten* next_in);
CharListenKnoten* get_next();
void set_next(CharListenKnoten* next_in);
char get_cont();
void set_cont(char cont_in);
};
//CharListenKnoten.cpp:
#include "CharListenKnoten.h"
CharListenKnoten::CharListenKnoten(char cont_in, CharListenKnoten* next_in)
{
cont = cont_in;
next = next_in;
}
void CharListenKnoten::set_next(CharListenKnoten* next_in)
{
next = next_in;
}
CharListenKnoten* CharListenKnoten::get_next()
{
return this->next;
}
char CharListenKnoten::get_cont()
{
return this->cont;
}
void CharListenKnoten::set_cont(char cont_in)
{
cont = cont_in;
}
//MyString.h:
#include "CharListenKnoten.h"
#include <string>
class MyString2
{
private:
CharListenKnoten* anker;
void append_internal(char p_data);
public:
CharListenKnoten* get_anker();
void set_anker(CharListenKnoten* anker_in);
MyString2(CharListenKnoten* anker_in);
MyString2(std::string input_string, CharListenKnoten* anker_in);
};
//MyString2.cpp:
#include "MyString2.h"
#include <iostream>
CharListenKnoten* MyString2::get_anker()
{
return this->anker;
}
void MyString2::set_anker(CharListenKnoten* anker_in)
{
anker = anker_in;
}
MyString2::MyString2(CharListenKnoten* anker_in)
{
set_anker(anker_in);
}
void MyString2::append_internal(char p_data)
{
CharListenKnoten* input = &CharListenKnoten(p_data, nullptr);
if (get_anker() == nullptr)
set_anker(input);
else
{
CharListenKnoten* hilfe = anker;
while (hilfe->get_next() != nullptr)
{
hilfe = hilfe->get_next();
std::cout << "1";
}
hilfe->set_next(input);
}
std::cout << this->anker->get_cont();
}
MyString2::MyString2(std::string input_string, CharListenKnoten* anker_in)
{
anker = anker_in;
for (int i = 0; i < input_string.length(); i++)
{
this->append_internal(input_string.at(i));
}
}
In einem Testprogramm versuche ich nun einen "echten" String in ein "String2" einzulesen:
C++:
#include <iostream>
#include "MyString2.h"
int main()
{
std::string input;
std::cout << "Testinput: ";
std::getline(std::cin, input);
MyString2 test = MyString2(input, nullptr);
std::cout << "Anker: " << test.get_anker()->get_cont();
}
Testinput: Hallo
HalloAnker: ╠
Ich würde mich freuen, wenn mir einer von euch etwas unter die Arme greifen könnte.
LG