#include <iostream>
#include <cstring>
using namespace std;
class String
{
char* a;
int size;
public:
String()
{
this->size = 80;
this->a = new char[size+1];
}
String(const char* ptr):String()
{
this->setString(ptr);
}
~String() {
delete[] this->a;
}
void setString(const char* ptr) {
if (ptr == nullptr)
{
return;
}
this->size = strlen(ptr);
delete[] this->a;
this->a = new char[size + 1];
for (size_t i = 0; i < size + 1; i++)
{
this->a[i] = ptr[i];
}
}
void show() {
for (size_t i = 0; i < size; i++)
{
cout << this->a[i];
}
cout << endl<<size<<endl;
}
char operator[](int ind)
{
return a[ind];
};
int operator()(const char* tmp) {
for (size_t i = 0; i < size; i++)
{
if (a[i] == tmp[0])
{
return i;
}
}
return -1;
};
operator int() {
return size;
}
void operator++(int) {
size++;
a = new char[size];
}
};
int main()
{
String a;
a.setString("words");
cout<<a("s")<<endl;
cout<<a[2]<<endl;
a.show();
a++;
a.show();
cout << (int)a << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBTdHJpbmcKewogICAgY2hhciogYTsKICAgIGludCBzaXplOwpwdWJsaWM6CiAgICAKICAgIFN0cmluZygpIAogICAgewogICAgICAgIHRoaXMtPnNpemUgPSA4MDsKICAgICAgICB0aGlzLT5hID0gbmV3IGNoYXJbc2l6ZSsxXTsKICAgIH0KICAgIFN0cmluZyhjb25zdCBjaGFyKiBwdHIpOlN0cmluZygpCiAgICB7CgogICAgICAgIHRoaXMtPnNldFN0cmluZyhwdHIpOwogICAgICAgIAogICAgfQogICAgflN0cmluZygpIHsKICAgICAgICBkZWxldGVbXSB0aGlzLT5hOwogICAgfQogICAgCiAgICB2b2lkIHNldFN0cmluZyhjb25zdCBjaGFyKiBwdHIpIHsKICAgICAgICBpZiAocHRyID09IG51bGxwdHIpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMtPnNpemUgPSBzdHJsZW4ocHRyKTsKICAgICAgICBkZWxldGVbXSB0aGlzLT5hOwogICAgICAgIHRoaXMtPmEgPSBuZXcgY2hhcltzaXplICsgMV07CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplICsgMTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+YVtpXSA9IHB0cltpXTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgdm9pZCBzaG93KCkgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCB0aGlzLT5hW2ldOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw8PHNpemU8PGVuZGw7CiAgICB9CgogICAgY2hhciBvcGVyYXRvcltdKGludCBpbmQpIAogICAgewogICAgICAgIHJldHVybiBhW2luZF07CiAgICB9OwoKICAgIGludCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIHRtcCkgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGFbaV0gPT0gdG1wWzBdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07CiAgICBvcGVyYXRvciBpbnQoKSB7CiAgICAgICAgcmV0dXJuIHNpemU7CiAgICB9CiAgICB2b2lkIG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgCiAgICAgICAgc2l6ZSsrOwogICAgICAgIGEgPSBuZXcgY2hhcltzaXplXTsKICAgIAogICAgfQp9OwoKCmludCBtYWluKCkKewogICAgU3RyaW5nIGE7CiAgICAKICAgIAogICAgYS5zZXRTdHJpbmcoIndvcmRzIik7CiAgICBjb3V0PDxhKCJzIik8PGVuZGw7CiAgICBjb3V0PDxhWzJdPDxlbmRsOwogICAgCiAgICBhLnNob3coKTsKICAgIGErKzsKICAgIGEuc2hvdygpOwogICAgY291dCA8PCAoaW50KWEgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0K