#include <iostream>
#include <cstring>
using std::strlen;
struct string
{
char *buffer;
std::size_t len;
string() : buffer(nullptr), len(0)
{}
string(char const *str) : buffer(new char[strlen(str) + 1]), len(strlen(str))
{
std::strcpy(buffer, str);
}
string(string const& other) : buffer(other.data()), len(other.size())
{}
string& operator +=(string const& other)
{
std::strcat(buffer, other.data());
return *this;
}
char *data() const { return buffer; }
std::size_t size() const { return len; }
};
std::ostream& operator <<(std::ostream& os, string const& str)
{
return os << str.data();
}
int main()
{
string s1 = "Hello", s2 = " World";
s1 += s2;
std::cout << s1;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIHN0ZDo6c3RybGVuOwoKc3RydWN0IHN0cmluZwp7CiAgICBjaGFyICpidWZmZXI7CiAgICBzdGQ6OnNpemVfdCBsZW47CiAgICAKICAgIHN0cmluZygpIDogYnVmZmVyKG51bGxwdHIpLCBsZW4oMCkKICAgIHt9CiAgICBzdHJpbmcoY2hhciBjb25zdCAqc3RyKSA6IGJ1ZmZlcihuZXcgY2hhcltzdHJsZW4oc3RyKSArIDFdKSwgbGVuKHN0cmxlbihzdHIpKQogICAgewogICAgICAgIHN0ZDo6c3RyY3B5KGJ1ZmZlciwgc3RyKTsKICAgIH0KICAgIHN0cmluZyhzdHJpbmcgY29uc3QmIG90aGVyKSA6IGJ1ZmZlcihvdGhlci5kYXRhKCkpLCBsZW4ob3RoZXIuc2l6ZSgpKQogICAge30KICAgIAogICAgc3RyaW5nJiBvcGVyYXRvciArPShzdHJpbmcgY29uc3QmIG90aGVyKQogICAgewogICAgICAgIHN0ZDo6c3RyY2F0KGJ1ZmZlciwgb3RoZXIuZGF0YSgpKTsKICAgICAgICAKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICAKICAgIGNoYXIgKmRhdGEoKSBjb25zdCB7IHJldHVybiBidWZmZXI7IH0KICAgIAogICAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGxlbjsgfQp9OwoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PChzdGQ6Om9zdHJlYW0mIG9zLCBzdHJpbmcgY29uc3QmIHN0cikKewogICAgcmV0dXJuIG9zIDw8IHN0ci5kYXRhKCk7Cn0KCmludCBtYWluKCkKewogICAgc3RyaW5nIHMxID0gIkhlbGxvIiwgczIgPSAiIFdvcmxkIjsKICAgIAogICAgczEgKz0gczI7CiAgICAKICAgIHN0ZDo6Y291dCA8PCBzMTsKfQ==