Скачиваний:
7
Добавлен:
15.06.2014
Размер:
3.98 Кб
Скачать
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

class string{
   friend ostream& operator<<(ostream&,const string&);
   friend istream& operator>>(istream&,const string&);

public:
   string(int=255);
   string(char*);
   string(const string&);
   ~string();
   const string& operator=(const string&);
   const string& operator=(const char*);
   string& operator+(const string&);
   string& operator-(const string&);
   int operator<(const string&);
   int operator>(const string&);
   int operator==(const string&);

private:
   char *st;

};

string::string(int len){
   st=new char[len+1];
   strcpy(st,"");
}

string::string(char *s){
   st=new char[strlen(s)+1];
   strcpy(st,s);
}

string::string(const string &s){
   st=new char[strlen(s.st)+1];
   strcpy(st,s.st);
}

string::~string(){
   delete[] st;
}

const string& string::operator=(const string &st1){
   delete[] st;
   st=new char[strlen(st1.st)+1];
   strcpy(st,st1.st);
   return *this;
}

const string& string::operator=(const char*s){
   delete[] st;
   st=new char[strlen(s)+1];
   strcpy(st,s);
   return *this;
}

string& string::operator+(const string &st1){
   static string s1;
   char *s=new char[strlen(st)+strlen(st1.st)+1];
   strcpy(s,st);
   strcat(s,st1.st);
   s1=s;
   return s1;
}

string& string::operator-(const string &st1){
   static string s2;
   s2=st;
   int i,j,k,x,len1,len2;
   len1=strlen(st);
   len2=strlen(st1.st);
   if(len2>len1) return s2;
   for(i=0;i<len1-len2;i++){
      x=1;
      for(k=0;k<len2;k++)
	 if(st[i+k]!=st1.st[k]) x=0;
      if(x) break;
   }
   if(!x) return s2;
   for(k=i;k<=i+strlen(st1.st);k++)
      s2.st[k]=s2.st[k+strlen(st1.st)];
   return s2;
}

int string::operator<(const string &st1){
   if(strcmp(st,st1.st)<0) return 1;
   else return 0;
}

int string::operator>(const string &st1){
   if(strcmp(st,st1.st)>0) return 1;
   else return 0;
}

int string::operator==(const string &st1){
   if(strcmp(st,st1.st)==0) return 1;
   else return 0;
}

ostream& operator<<(ostream &output,const string &st1){
   output<<st1.st;
   return output;
}

istream& operator>>(istream &input,const string &st1){
   input>>st1.st;
   return input;
}

class newstring : public string{
public:
   newstring(int=255);
   newstring(char*);
   newstring(const newstring&);
   ~newstring();

private:
   int chrnum(char,char*);
   char* solve(char *st);

};

newstring::newstring(int len)
   : string(len){

}

newstring::newstring(char *s)
   : string(solve(s)){

}

newstring::newstring(const newstring &s)
   : string(s){

}

newstring::~newstring(){

}

int newstring::chrnum(char c,char *s){
   int i;
   for (i=0;i<strlen(s);i++)
      if(c==s[i])
	 break;
   return i;
}


char* newstring::solve(char *st){
   char s1[]="{[(<'",s2[]="}])>'",*c,a[80];
   char *s=st;
   int i,k=-1,n1=0,n2=0;
   for(i=0;i<strlen(st);i++){
      if(strchr(s1,st[i])) ++n1;
      if(strchr(s2,st[i])) ++n2;
   }
   if(n1>n2){
      s=new char[strlen(st)+40];
      strcpy(s,st);
      strcat(s," - ЌҐ еў в Ґв § Єалў о饩 бЄ®ЎЄЁ.");
   }
   if(n1<n2){
      s=new char[strlen(st)+34];
      strcpy(s,st);
      strcat(s," - ЌҐ еў в Ґв ®вЄалў о饩 бЄ®ЎЄЁ.");
   }
   for(i=0;i<strlen(st);i++){
      c=strchr(s1,st[i]);
      if(c) a[++k]=*c;
      c=strchr(s2,st[i]);
      if((k==-1)&&c){
	 s=new char[strlen(st)+31];
	 strcpy(s,st);
	 strcat(s," - ЌҐЇа ўЁ«м­л© Ї®а冷Є бЄ®Ў®Є.");
	 break;
      }
      if((k>=0)&&c){
	 if(a[k]!=s1[chrnum(*c,s2)]){
	    s=new char[strlen(st)+31];
	    strcpy(s,st);
	    strcat(s," - ЌҐЇа ўЁ«м­л© Ї®а冷Є бЄ®Ў®Є.");
	    break;
	 }
	 else --k;
      }
   }
   return s;
}

void main(){
   clrscr();
   newstring s1="1{()}55552345789";
   newstring s2=s1;
   s1=s2;
   cout<<s1<<endl;
   cout<<s2<<endl;
   getch();
}