#include <assert.h>
#include <string.h>

class String
{
public:
	enum type
	{
		const_len = 0,
		any_len = 1,
		same = 2,
	} ;

	char* text;
	int lenght;
	type TypeOfString;

	String();
	String(char* p, String::type tos = any_len);
	String(int len, type tos = const_len);
	String(char ch, int repeat = 1, type tos = any_len);
	String(String& str, type tos = same);

	~String() { delete [] text; }

	int GetLenght();
	void Clean();
	bool IsEmpty(); 
	char* GetText();

	String leftSubstring(int count);
	String Substring(int first);
	String Substring(int first, int count);
	String rightSubstring(int count);

	char GetChar(int index) ;
	char& operator[](int index) ;
	void SetChar(int index, char ch);

	//friend String operator=(String& ls, String& rs);
	//friend String operator=(String& ls, char* rs);
	//friend String operator=(char* ls, String& rs);
	String operator=(String& rs);
	String operator=(char* rs);

	friend String operator+(String& ls, String& rs);
	friend String operator+(String& ls, char* rs);
	friend String operator+(char* ls, String& rs);

	friend String operator+=(String& ls, String& rs);
	friend String operator+=(String& ls, char* rs);
	friend String operator+=(char* ls, String& rs);
}