Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лаба 5 Без названия / LABA5
.CPP#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();
}