//////////////////////////////////////
/////////////MyString.cpp/////////////
//////////////////////////////////////
#include "MyString.h"
//构造器
String::String(const String &s)
{
size=s.Length()+1;
str=new char[size];
strcpy(str,(char *)s);
}
String::String(char *s)
{
size=strlen(s)+1;
str=new char[size];
strcpy(str,s);
}
//销毁器
String::~String(void)
{
#ifndef _DEBUG
delete []str;
str=0;
#endif
}
//重载操作符
String& String::operator = (const String &s)
{
if(strcmp(str,(char *)s)==0)
return *this;
delete []str;
str=0;
size=s.Length()+1;
str=new char[size];
strcpy(str,(char *)s);
return *this;
}
String& String::operator = (char *s)
{
if(strcmp(str,s)==0)
return *this;
delete []str;
str=0;
size=strlen(s)+1;
str=new char[size];
strcpy(str,s);
return *this;
}
int String::operator == (const String &s)const
{
if(strcmp(str,(char *)s)==0 && Length()==s.Length())
return TRUE;
return FALSE;
}
int String::operator == (char *s)
{
if(strcmp(str,s)==0 && Length()==(int)strlen(s))
return TRUE;
return FALSE;
}
int operator == (char *str,const String &s)
{
if(strcmp(str,(char *)s)==0 && (int)strlen(str)==s.Length())
return TRUE;
return FALSE;
}
int String::operator != (const String &s)const
{
if(strcmp(str,(char *)s)!=0 || Length()!=s.Length())
return TRUE;
return FALSE;
}
int String::operator != (char *s)
{
if(strcmp(str,s)!=0 || Length()!=(int)strlen(s))
return TRUE;
return FALSE;
}
int operator != (char *str,const String &s)
{
if(strcmp(str,(char *)s)!=0 || (int)strlen(str)!=s.Length())
return TRUE;
return FALSE;
}
int String::operator < (const String &s)const
{
if(strcmp(str,(char *)s)==-1)
return TRUE;
return FALSE;
}
int String::operator < (char *s)
{
if(strcmp(str,s)==-1)
return TRUE;
return FALSE;
}
int operator < (char *str,const String &s)
{
if(strcmp(str,(char *)s)==-1)
return TRUE;
return FALSE;
}
int String::operator <= (const String &s)const
{
if(strcmp(str,(char *)s)!=1)
return TRUE;
return FALSE;
}
int String::operator <= (char *s)
{
if(strcmp(str,s)!=1)
return TRUE;
return FALSE;
}
int operator <= (char *str,const String &s)
{
if(strcmp(str,(char *)s)!=1)
return TRUE;
return FALSE;
}
int String::operator > (const String &s)const
{
if(strcmp(str,(char *)s)==1)
return TRUE;
return FALSE;
}
int String::operator > (char *s)
{
if(strcmp(str,s)==1)
return TRUE;
return FALSE;
}
int operator > (char *str,const String &s)
{
if(strcmp(str,(char *)s)==1)
return TRUE;
return FALSE;
}
int String::operator >= (const String &s)const
{
if(strcmp(str,(char *)s)!=-1)
return TRUE;
return FALSE;
}
int String::operator >= (char *s)
{
if(strcmp(str,s)!=-1)
return TRUE;
return FALSE;
}
int operator >= (char *str,const String &s)
{
if(strcmp(str,(char *)s)!=-1)
return TRUE;
return FALSE;
}
String String::operator + (const String &s)
{
String strtmp;
strcat((char *)strtmp,str);
strcat((char *)strtmp,(char *)s);
return strtmp;
}
String String::operator + (char *s)
{ String strtmp;
strcat((char *)strtmp,str);
strcat((char *)strtmp,s);
strtmp.size=Length()+strlen(s)+1;
return strtmp;
}
String operator + (char *str,const String &s)
{
String strtmp;
strcat((char *)strtmp,str);
strcat((char *)strtmp,(char *)s);
strtmp.size=strlen(str)+s.Length()+1;
return strtmp;
}
void String::operator += (const String &s)
{
size+=s.Length();
strcat(str,(char *)s);
}
void String::operator += (char *s)
{
size+=strlen(s);
strcat(str,s);
}
//取子串
String String::Substr(int index,int count)const
{
String strtmp;
if(index<=0)
{
cout<<"开始位置必须是正整数!\n";
return strtmp;
}
if(index>=size)
{
cout<<"字符串长度不够!\n";
return strtmp;
}
if((index+count)>size)
{
cout<<"没有足够的字符!\n";
return strtmp;
}
char *s=new char[count+1];
for(int i=0;i<count;i++)
s[i]=str[index++];
s[i]=NULL;
strtmp=s;
delete []s;
return strtmp;
}
//插入串
void String::Insert(const String &s,int index)
{
if(index<=0)
{
cout<<"开始位置必须是正整数!\n";
}
else if(index>=size)
{
cout<<"字符串长度不够!\n";
}
else
{
size+=(s.Length());
char *stmp=new char[size];
int i,j,k;
for(i=0;i<=index-2;i++)
stmp[i]=str[i];
for(j=0;j<=s.Length()-1;j++)
stmp[i+j]=s[j];
for(k=0;i+j+k<=size;k++)
stmp[i+j+k]=str[i+k];
str=stmp;
}
}
void String::Insert(char *s,int index)
{
if(index<=0)
{
cout<<"开始位置必须是正整数!\n";
}
else if(index>=size)
{
cout<<"字符串长度不够!\n";
}
else
{
size+=strlen(s);
char *stmp=new char[size];
int i,j,k;
for(i=0;i<=index-2;i++)
stmp[i]=str[i];
for(j=0;j<=(int)(strlen(s)-1);j++)
stmp[i+j]=s[j];
for(k=0;i+j+k<=size;k++)
stmp[i+j+k]=str[i+k];
str=stmp;
}
}
//删除子串
void String::Remove(int index,int count)
{
if(index<=0)
{
cout<<"开始位置必须是正整数!\n";
}
else if(index>=size)
{
cout<<"字符串长度不够!\n";
}
else if((index+count)>size)
{
cout<<"没有足够的字符!\n";
}
else
{
for(int i=-1;i<=count;i++)
str[i+index]=str[i+index+count];
str[i+index]=NULL;
size-=count;
}
}
//下标运算
char& String::operator [] (int n)
{
return str[n];
}
//强制转换成char*型
String::operator char *(void)const
{
return str;
}
//String的输入与输出
ostream& operator << (ostream &ostr,const String &s)
{
ostr<<(char *)s;
return ostr;
}
istream& operator >> (istream &istr,String &s)
{
delete []s.str;
s.str=0;
s.str=new char[MAX_CHAR];
istr>>(char *)s;
return istr;
}
int String::ReadString(istream &is,char delimiters)
{
delete []str;
str=0;
str=new char[MAX_CHAR];
is.getline(str,MAX_CHAR,delimiters);
return TRUE;
}
//其他函数
int String::Length(void)const
{
return size-1;
}
int String::IsEmpty(void)const
{
if(*str==NULL && size==1)
return TRUE;
return FALSE;
}
void String::Clear(void)
{
#ifndef _DEBUG
delete []str;
str=0;
str=new char;
#endif
size=1;
*str=NULL;
}
int String::Findword(int start,String &word)
{
int flag;
int i;
for(i=start-1;i<(size-word.Length()-1);i++)
{
flag=0;
for(int j=0;j<word.Length();j++)
{
if(str[i+j]!=word[j])
{
flag=1;
break;
}
}
if(flag==0)
break;
}
if(flag==0)
return i+1;
return -1;
}
int String::Findword(int start,char *s)
{
int flag;
int i;
for(i=start-1;i<(int)(size-strlen(s)-1);i++)
{
flag=0;
for(int j=0;j<(int)strlen(s);j++)
{
if(str[i+j]!=s[j])
{
flag=1;
break;
}
}
if(flag==0)
break;
}
if(flag==0)
return i+1;
return -1;
}