#include<cstring>
#include<iostream>
class stringb
{
public:
stringb() :
p (new char[25]), len(25)
{
}
stringb(char* s) :
p (new char[std::strlen(s)])
{
len = std::strlen(s);
std::strcpy (p, s );
}
stringb (const stringb& other) :
p (new char[std::strlen (other.p) + 1]), len(std::strlen (other.p))
{
std::strcpy (p, other.p );
}
/** Move Constructor Since C++11*/
stringb (stringb&& other) :
p (other.p),len(0)
{
other.p = nullptr;
}
/** Destructor */
~stringb()
{
delete[] p;
}
/** Copy Assignment Operator */
stringb& operator= (const stringb& other)
{
stringb temporary (other);
std::swap (p, temporary.p);
return *this;
}
/** Move Assignment Operator Since C++11*/
stringb& operator= (stringb&& other)
{
std::swap (p, other.p);
return *this;
}
private:
char* p;
std::size_t len;
friend std::ostream& operator<< (std::ostream& os, const stringb& stringb)
{
os << stringb.p;
return os;
}
friend stringb operator+(const stringb &a,const stringb &b)
{
stringb temp;
temp.len = a.len + b.len;
temp.p=new char[(temp.len)+1];
std::strcpy(temp.p, a.p);
std::strcat(temp.p, b.p);
return (temp);
}
/* Not sure what this will do */
friend stringb operator-(const stringb &a,const stringb &b)
{
stringb temp;
temp.len=a.len-b.len;
temp.p=new char[temp.len+1];
std::strcpy(temp.p,a.p);
return (temp);
}
};
int main()
{
stringb a("POW");
stringb b("JACK");
stringb c;
c=a+b;
std::cout<< c<< ","<<a<<","<<b;
}
I2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8aW9zdHJlYW0+CiAKY2xhc3Mgc3RyaW5nYgp7CgpwdWJsaWM6CiAgICBzdHJpbmdiKCkgOgogICAgICAgIHAgKG5ldyBjaGFyWzI1XSksIGxlbigyNSkKICAgIHsKICAgIH0KICAgICBzdHJpbmdiKGNoYXIqIHMpIDoKICAgICAgICBwIChuZXcgY2hhcltzdGQ6OnN0cmxlbihzKV0pCiAgICB7CiAgICAgICAgbGVuID0gc3RkOjpzdHJsZW4ocyk7CiAgICAgICAgc3RkOjpzdHJjcHkgKHAsIHMgKTsKICAgIH0KCiAgICBzdHJpbmdiIChjb25zdCBzdHJpbmdiJiBvdGhlcikgOgogICAgICAgIHAgKG5ldyBjaGFyW3N0ZDo6c3RybGVuIChvdGhlci5wKSArIDFdKSwgbGVuKHN0ZDo6c3RybGVuIChvdGhlci5wKSkKICAgIHsKICAgICAgICBzdGQ6OnN0cmNweSAocCwgb3RoZXIucCApOwogICAgfQogCiAgICAvKiogTW92ZSBDb25zdHJ1Y3RvciAgU2luY2UgQysrMTEqLwogICAgc3RyaW5nYiAoc3RyaW5nYiYmIG90aGVyKSA6CiAgICAgICAgcCAob3RoZXIucCksbGVuKDApCiAgICB7CiAgICAgICAgb3RoZXIucCA9IG51bGxwdHI7CiAgICB9CiAKICAgIC8qKiBEZXN0cnVjdG9yICovCiAgICB+c3RyaW5nYigpCiAgICB7CiAgICAgICAgZGVsZXRlW10gcDsKICAgIH0KIAogICAgLyoqIENvcHkgQXNzaWdubWVudCBPcGVyYXRvciAqLwogICAgc3RyaW5nYiYgb3BlcmF0b3I9IChjb25zdCBzdHJpbmdiJiBvdGhlcikKICAgIHsKICAgICAgICBzdHJpbmdiIHRlbXBvcmFyeSAob3RoZXIpOwogICAgICAgIHN0ZDo6c3dhcCAocCwgdGVtcG9yYXJ5LnApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIAogICAgLyoqIE1vdmUgQXNzaWdubWVudCBPcGVyYXRvciBTaW5jZSBDKysxMSovCiAgICBzdHJpbmdiJiBvcGVyYXRvcj0gKHN0cmluZ2ImJiBvdGhlcikKICAgIHsKICAgICAgICBzdGQ6OnN3YXAgKHAsIG90aGVyLnApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIApwcml2YXRlOgogICAgY2hhciogcDsgIAogICAgc3RkOjpzaXplX3QgbGVuOwogICAgICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwgKHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IHN0cmluZ2ImIHN0cmluZ2IpCiAgICB7CiAgICAgICAgb3MgPDwgc3RyaW5nYi5wOwogICAgICAgIHJldHVybiBvczsKICAgIH0KICAgIAoKICAgIGZyaWVuZCBzdHJpbmdiIG9wZXJhdG9yKyhjb25zdCBzdHJpbmdiICZhLGNvbnN0IHN0cmluZ2IgJmIpCiAgICB7CiAgICAgICAgc3RyaW5nYiB0ZW1wOwogICAgICAgIHRlbXAubGVuID0gYS5sZW4gKyBiLmxlbjsKICAgICAgICB0ZW1wLnA9bmV3IGNoYXJbKHRlbXAubGVuKSsxXTsKICAgICAgICBzdGQ6OnN0cmNweSh0ZW1wLnAsIGEucCk7CiAgICAgICAgc3RkOjpzdHJjYXQodGVtcC5wLCBiLnApOwogICAgICAgIHJldHVybiAodGVtcCk7CiAgICB9CiAgICAKICAgIC8qIE5vdCBzdXJlIHdoYXQgdGhpcyB3aWxsIGRvICovCiAgICBmcmllbmQgc3RyaW5nYiBvcGVyYXRvci0oY29uc3Qgc3RyaW5nYiAmYSxjb25zdCBzdHJpbmdiICZiKQogICAgeyAgIAogICAgICAgIHN0cmluZ2IgdGVtcDsKICAgICAgICB0ZW1wLmxlbj1hLmxlbi1iLmxlbjsKICAgICAgICB0ZW1wLnA9bmV3IGNoYXJbdGVtcC5sZW4rMV07CiAgICAgICAgc3RkOjpzdHJjcHkodGVtcC5wLGEucCk7CiAgICAgICAgcmV0dXJuICh0ZW1wKTsKICAgIH0KfTsKCgoKaW50IG1haW4oKQp7CiAgICBzdHJpbmdiIGEoIlBPVyIpOwogICAgc3RyaW5nYiBiKCJKQUNLIik7CgogICAgc3RyaW5nYiBjOwogICAgYz1hK2I7CiAgICBzdGQ6OmNvdXQ8PCBjPDwgIiwiPDxhPDwiLCI8PGI7Cn0=