-
自己实现的一个string类,包括基本构造,复制构造,赋值和析构函数,比较函数,输入输出函数,锻炼一下动手能力。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
class
MyString{
public
:
MyString(
const
char
*s=NULL);
MyString(
const
MyString& rhs);
MyString& operator=(
const
MyString& rhs);
MyString& operator=(
const
char
* s);
~MyString();
char
& operator[](
int
i);
int
length()
const
{
return
len; }
char
*c_str(){
return
data;}
friend bool operator<(
const
MyString &st1,
const
MyString &st2);
friend bool operator>(
const
MyString &st1,
const
MyString &st2);
friend bool operator==(
const
MyString &st1,
const
MyString &st2);
friend MyString operator+(
const
MyString &s1,
const
MyString &s2);
friend ostream& operator<<(ostream &os,
const
MyString &st);
friend istream& operator>>(istream &is, MyString &st);
private
:
char
*data;
int
len;
};
MyString::MyString(
const
char
*s)
{
if
(NULL==s)
{
len=
0
;
data=
new
char
[
1
];
*data=
'\0'
;
}
else
{
len=strlen(s);
data=
new
char
[len+
1
];
strcpy(data,s);
}
}
MyString::MyString(
const
MyString &rhs)
{
len=strlen(rhs.data);
data=
new
char
[len+
1
];
strcpy(data,rhs.data);
}
MyString& MyString::operator=(
const
MyString &rhs)
{
if
(
this
==&rhs)
return
*
this
;
delete []data;
len=strlen(rhs.data);
data=
new
char
[len+
1
];
strcpy(data,rhs.data);
return
*
this
;
}
MyString& MyString::operator=(
const
char
* s)
{
delete []data;
len=strlen(s);
data=
new
char
[len+
1
];
strcpy(data,s);
return
*
this
;
}
MyString::~MyString()
{
delete []data;
}
char
& MyString::operator[](
int
i)
{
return
data[i];
}
//注意友元函数定义时不要friend,而且不要String::
bool operator<(
const
MyString &st1,
const
MyString &st2)
{
return
(strcmp(st1.data,st2.data)<
0
);
}
bool operator>(
const
MyString &st1,
const
MyString &st2)
{
return
(strcmp(st1.data,st2.data)>
0
);
}
bool operator==(
const
MyString &st1,
const
MyString &st2)
{
return
(strcmp(st1.data,st2.data)==
0
);
}
MyString operator+(
const
MyString &st1,
const
MyString &st2)
{
MyString res;
res.len=st1.len+st2.len;
res.data=
new
char
[res.len+
1
];
strcpy(res.data,st1.data);
strcat(res.data,st2.data);
return
res;
}
istream &operator>>(istream &cin, MyString &str)
{
const
int
limit_string_size =
4096
;
str.data =
new
char
[limit_string_size];
cin >> setw(limit_string_size) >> str.data;
str.len = strlen(str.data);
return
cin;
}
自己实现的string类
最新推荐文章于 2024-08-02 18:39:03 发布