# include & ltiostream.h & gt
# include & ltstring.h & gt
類MyString
{
公共:
MyString();//無參數構造函數
MyString(const MyString & amp;c);//復制構造函數
MyString(char * p);//參數化構造函數
void SetString(char * p);//設置字符串
int GetLength();//返回字符串長度
MyString Ltrim();//刪除左邊的空格
MyString Rtrim();//刪除右邊的空格
MyString StrLink(char * p);//連接字符串
我的字符串StrLink(我的字符串& ampc);//連接字符串
MyString Ucase();//將字符串中的所有小寫字母轉換為大寫字母。
MyString Lcase();//將字符串中的所有大寫字母轉換為小寫字母。
MyString DelChar(char ch);//刪除字符串中指定字符的所有匹配項。
char * ToString();//返回字符數組
MyString運算符=(char * p);
MyString運算符=(const MyString one);
MyString運算符+=(char * p);
MyString運算符+(char * p);
MyString運算符+(const MyString one);
friend MyString運算符+ (char *p,const MyString one);
~ MyString();//析構函數
私人:
char * str
int array _ len//字符數組長度
int str _ len//字符串的實際長度
};
MyString::MyString()
{
這-& gt;str = new char[1];
這-& gt;str _ len = 1;
這-& gt;數組_長度= 0;
}
MyString::MyString(char *p)
{
int I = 0;
while(*(p+i)!='\0')
{
i++;
}
這-& gt;str = new char[I+1];
這-& gt;array _ len = I+1;
這-& gt;str _ len = I;
for(int j = 0;j & lt數組_長度;j++)str[j]= *(p+j);
}
MyString::MyString(const MyString & amp;c)
{
這-& gt;數組_長度=c .數組_長度;
這-& gt;str _ len = c.str _ len
str = new char[this-& gt;array _ len];
for(int I = 0;我& lt這-& gt;數組_長度;i++)
這-& gt;str[I]= c . str[I];
}
void MyString::SetString(char *p)
{
如果(this-& gt;str)delete[]this-& gt;str
int I = 0;
while(*(p+i)!='\0')
{
i++;
}
這-& gt;str = new char[I+1];
這-& gt;array _ len = I+1;
這-& gt;str _ len = I;
for(int j = 0;j & lt數組_長度;j++)str[j]= *(p+j);
}
int MyString::GetLength()
{
返回這個-& gt;str _ len
}
MyString MyString::operator =(const MyString one)
{
SetString(one . str);
返回* this
}
MyString MyString::operator+(char * p)
{
MyString one = this-& gt;StrLink(p);
退壹個;
}
MyString MyString::operator+=(char * p)
{
* this = this-& gt;StrLink(p);
返回* this
}
MyString MyString::DelChar(char ch)
{
int count = 0;
char * tmp = new char[array _ len];
for(int i=0,j = 0;我& lt數組_長度;i++)
{
if(str[i]!= ch)tmp[j++]= str[I];
}
MyString * oneString = new MyString(tmp);
刪除[]tmp;
return * oneString
}
MyString運算符+(char *p,const MyString one)
{
char * tmp = new char[strlen(p)+one . array _ len];
int I = 0;
for(;我& lt(int)strlen(p);i++)
{
tmp[I]= p[I];
}
for(int j = 0;j & ltone.array _ lenj++)
{
tmp[i++]= one . str[j];
}
return *(新的MyString(tmp));
}
MyString MyString::operator+(const MyString one)
{
return * this+one . str;
}
MyString MyString::StrLink(MyString & amp;c)
{
return * this+c . ToString();
}
MyString MyString::StrLink(char * p)
{
char * tmp = new char[array _ len+strlen(p)];
int I = 0;
for(;我& ltarray _ len-1;i++)
{
tmp[I]= str[I];
}
for(int j = 0;j & lt=(int)(strlen(p));j++,i++)
{
tmp[I]= p[j];
}
return *(新的MyString(tmp));
}
MyString MyString::Lcase()
{
MyString * oneString = new MyString(* this);
for(int I = 0;我& lt數組_長度;i++)
{
if(str[i]>= 65 & amp& ampstr[I]& lt;=90)
one string-& gt;str[I]+= 32;
}
return * oneString
}
MyString MyString::Ucase()
{
MyString * oneString = new MyString(* this);
for(int I = 0;我& lt數組_長度;i++)
{
if(str[i]>= 97 & amp& ampstr[I]& lt;=122)
one string-& gt;str[I]-= 32;
}
return * oneString
}
MyString MyString::Ltrim()
{
MyString * oneString = new MyString(* this);
char * tmp = new char[array _ len];
bool go = false
for(int i=0,j = 0;我& lt數組_長度;i++)
{
如果(!去吧)
if(str[i]!= 32)go = true;
否則繼續;
tmp[j++]= str[I];
}
one string-& gt;SetString(tmp);
刪除[]tmp;
return * oneString
}
MyString MyString::Rtrim()
{
char * tmp = new char[array _ len];
for(int I = 0;我& lt數組_長度;i++)
{
tmp[I]= str[I];
}
for(int j = array _ len-2;j & gt0;j -)
{
if(tmp[j]= = ' ')tmp[j]= ' \ 0 ';
else break
}
MyString one(tmp);
刪除[]tmp;
退壹個;
}
MyString::~MyString()
{
如果(this-& gt;str)delete[]this-& gt;str
}
char* MyString::ToString()
{
返回這個-& gt;str
}
int main(int argc,char* argv[])
{
MyString str 1(" wangaocao ");//初始化str1
str1=str1。DelChar(' o ');//Delete ' o ' str 1 . str = " wanga cha "
MyString str2
str2。SetString(“和鄧小琴”);
str1=str1。StrLink(str 2);//對象連接STR1。STR = "萬嘎查和鄧小琴"
//也可以用str 1 = str 1+str 2;或者str 1+= str;可以達到同相的效果。
MyString str3=str1。StrLink("都是老師。");
//str3.str="wangacha和鄧小琴是老師。"
//mystring str 3 = str 1+"都是老師。”可以達到和上面壹樣的效果。
cout & lt& ltstr1。ToString()& lt;& ltendl//顯示王加查和鄧是的老師。
MyString one= "妳說:"+str 1;//one.str= "妳說:萬嘎查和鄧小琴是老師"
cout & lt& lt壹個。ToString()& lt;& ltendl
壹=壹。ucase();//轉換成大寫
cout & lt& lt壹個。ToString()& lt;& ltendl
cout & lt& lt壹個。Lcase()。ToString()& lt;& ltendl//再次轉換為小寫,但不改變小寫本身。
one = " "+one+" ";//添加左右空格
cout & lt& lt壹個。ToString()& lt;& lt“對”& lt& ltendl//看效果
壹=壹。ltrim();//刪除左右空格
壹=壹。rtrim();
cout & lt& lt壹個。ToString()& lt;& lt“對”& lt& ltendl//看效果
cout & lt& lt壹個。GetLength()& lt;& ltendl//輸出字符數
返回0;
}