#include <stdio.h>
#include <string.h>
/*
struct String {
int length;
char* s;
};
*/
class String {
int length;
char* s;
public:
String(const char* p = "");
String(const String& s) {
this->length = s.length;
this->s = new char[this->length+1];
strcpy(this->s, s.s);
}
int getLength();
String concat(const String& s2);
~String();
void print();
};
/*
String* create(char* p) {
String* r = new String;
r->length = strlen(p);
r->s = new char[r->length+1];
strcpy(r->s, p);
return r;
}
*/
String::String(const char* p) {
this->length = strlen(p);
//length = strlen(p);
this->s = new char[this->length+1];
//s = new char[length+1];
strcpy(this->s, p);
//strcpy(s,p);
}
/*
int getLength(String* s) {
return s->length;
}
*/
int String::getLength() {
return length;
}
/*
String* concat(String* s1, String* s2) {
String* s3 = new String;
s3->length = s1->length+s2->length;
s3->s = new char[s3->length+1];
strcpy(s3->s, s1->s);
strcat(s3->s, s2->s);
return s3;
}
*/
String String::concat(const String& s2) {
String s3;
s3.length = this->length + s2.length;
delete [] s3.s;
s3.s = new char[s3.length+1];
strcpy(s3.s, s);
strcat(s3.s, s2.s);
return s3;
}
/*
void print(String* s) {
printf("%s", s->s);
}
*/
void String::print() {
printf("%s", this->s);
}
/*
void destroy(String* s) {
delete[] s->s;
delete s;
}
*/
String::~String() {
delete [] this->s;
}
int main() {
String a("hello");
String b(" world");
a.print();
b.print();
printf("\n");
String c = a.concat(b);
c.print();
printf("\n");
}