/******************************************************************************
The main function is at the bottom of this source file.
*******************************************************************************/
#include <stdio.h>
#include <iostream>
class StringF {
private:
const char* string;
public:
StringF(const char*);
int length();
const char* copy();
const char* getString();
const char* reverse();
int find(const char*);
StringF& operator+=(StringF&);
friend std::ostream& operator<<(std::ostream&, StringF&);
};
std::ostream& operator<<(std::ostream& os, StringF& string) {
os << string.getString();
return os;
}
StringF& StringF::operator+=(StringF& obj) {
const char* string = this->getString();
const char* stringToAppend = obj.getString();
const int stringLength = this->length();
const int stringToAppendLength = obj.length();
char* appendedString = new char[stringLength + stringToAppendLength];
appendedString[stringLength + stringToAppendLength] = '\0';
for (int i = 0; i < stringLength; i++) {
appendedString[i] = string[i];
}
for (int i = stringLength; i < stringLength + stringToAppendLength; i++) {
appendedString[i] = stringToAppend[i - stringLength];
}
StringF appendedObj(appendedString);
std::cout << "Appended obj: " << appendedObj.getString() << std::endl; //For debugging
return appendedObj;
}
StringF::StringF(const char* string) {
StringF::string = string;
}
const char* StringF::getString() {
return StringF::string;
}
int StringF::length() {
int length = 0;
for (int i = 0; i < 9000; i++) {
if (StringF::string[i] != 0) {
length++;
}
else {
break;
}
}
return length;
}
int main()
{
StringF s("Hello");
StringF s2(", World!");
s += s2;
std::cout << s << std::endl;
return 0;
}