#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include "string3.h"

String::String(int N = 80)
{
   StrPtr = new char [N + 1];
   if (!StrPtr) { cout << "Нет памяти !"; exit(1); }
   StrPtr[0] = '\0';
}

String::String(const char* Str)
{
   StrPtr = new char [strlen(Str) + 1];
   if (!StrPtr) { cout << "Нет памяти !"; exit(1); }
   strcpy(StrPtr,Str);
}

String::String(const String& Ob)
{
   StrPtr = new char [strlen(Ob.StrPtr) + 1];
   if (!StrPtr) { cout << "Нет памяти !"; exit(1); }
   strcpy(StrPtr, Ob.StrPtr);
}

String& String::operator = (String Ob)
{
   if (StrPtr == Ob.StrPtr) return *this;
   delete [] StrPtr;
   StrPtr = new char [strlen(Ob.StrPtr) + 1];
   if (!StrPtr) { cout << "Нет памяти !"; exit(1); }
   strcpy(StrPtr, Ob.StrPtr);
   return *this;
}

String String::operator = (char* Str)
{
   delete [] StrPtr;
   StrPtr = new char [strlen(Str) + 1];
   if (!StrPtr) { cout << "Нет памяти !"; exit(1); }
   strcpy(StrPtr,Str);
   return *this;
}

int operator + (int k, String& Ob)
{
   k += strlen(Ob.StrPtr);
   return k;
}

bool String::operator == (String Ob)
{
   if (strcmp(StrPtr, Ob.StrPtr) == 0) return true;
   else return false;
}

bool String::operator == (char* Str)
{
   if (strcmp(StrPtr, Str) == 0) return true;
   else return false;
}

bool operator == (char* Str, String Ob)
{
   if (strcmp(Str, Ob.StrPtr) == 0) return true;
   else return false;
}

bool String::operator != (String Ob)
{
   if (strcmp(StrPtr, Ob.StrPtr) != 0) return true;
   else return false;
}

bool String::operator != (char* Str)
{
   if (strcmp(StrPtr, Str) != 0) return true;
   else return false;
}

bool operator != (char* Str, String Ob)
{
   if (strcmp(Str, Ob.StrPtr) != 0) return true;
   else return false;
}

bool String::operator < (String Ob)
{
   if (strcmp(StrPtr, Ob.StrPtr) < 0) return true;
   else return false;
}

istream& operator >> (istream& inp, String& Ob)
{
   cout << "Введите строку: ";
   inp >> Ob.StrPtr;
   return inp;
}

ostream& operator << (ostream& out, String& Ob)
{
   out << Ob.StrPtr;
   return out;
}

