2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*-------------------------------------
* 日期:2015-03-31
* 作者:SJF0115
* 题目: 实现string类
* 来源:百度
* 博客:
------------------------------------*/
#include <iostream>
#include <cstring>
using namespace std;
class
String{
public
:
// 默认构造函数
String(
const
char
* str = NULL);
// 复制构造函数
String(
const
String &str);
// 析构函数
~String();
// 字符串连接
String operator+(
const
String & str);
// 字符串赋值
String & operator=(
const
String &str);
// 字符串赋值
String & operator=(
const
char
* str);
// 判断是否字符串相等
bool operator==(
const
String &str);
// 获取字符串长度
int
length();
// 求子字符串[start,start+n-1]
String substr(
int
start,
int
n);
// 重载输出
friend ostream & operator<<(ostream &o,
const
String &str);
private
:
char
* data;
int
size;
};
// 构造函数
String::String(
const
char
*str){
if
(str == NULL){
data =
new
char
[
1
];
data[
0
] =
'\0'
;
size =
0
;
}
//if
else
{
size = strlen(str);
data =
new
char
[size+
1
];
strcpy(data,str);
}
//else
}
// 复制构造函数
String::String(
const
String &str){
size = str.size;
data =
new
char
[size+
1
];
strcpy(data,str.data);
}
// 析构函数
String::~String(){
delete[] data;
}
// 字符串连接
String String::operator+(
const
String &str){
String newStr;
//释放原有空间
delete[] newStr.data;
newStr.size = size + str.size;
newStr.data =
new
char
[newStr.size+
1
];
strcpy(newStr.data,data);
strcpy(newStr.data+size,str.data);
return
newStr;
}
// 字符串赋值
String & String::operator=(
const
String &str){
if
(data == str.data){
return
*
this
;
}
//if
delete [] data;
size = str.size;
data =
new
char
[size+
1
];
strcpy(data,str.data);
return
*
this
;
}
// 字符串赋值
String& String::operator=(
const
char
* str){
if
(data == str){
return
*
this
;
}
//if
delete[] data;
size = strlen(str);
data =
new
char
[size+
1
];
strcpy(data,str);
return
*
this
;
}
// 判断是否字符串相等
bool String::operator==(
const
String &str){
return
strcmp(data,str.data) ==
0
;
}
// 获取字符串长度
int
String::length(){
return
size;
}
// 求子字符串[start,start+n-1]
String String::substr(
int
start,
int
n){
String newStr;
// 释放原有内存
delete [] newStr.data;
// 重新申请内存
newStr.data =
new
char
[n+
1
];
for
(
int
i =
0
;i < n;++i){
newStr.data[i] = data[start+i];
}
//for
newStr.data[n] =
'\0'
;
newStr.size = n;
return
newStr;
}
// 重载输出
ostream & operator<<(ostream &o,
const
String &str){
o<<str.data;
return
o;
}
int
main(){
String str1(
"hello "
);
String str2 =
"world"
;
String str3 = str1 + str2;
cout<<
"str1->"
<<str1<<
" size->"
<<str1.length()<<endl;
cout<<
"str2->"
<<str2<<
" size->"
<<str2.length()<<endl;
cout<<
"str3->"
<<str3<<
" size->"
<<str3.length()<<endl;
String str4(
"helloworld"
);
if
(str3 == str4){
cout<<str3<<
" 和 "
<<str4<<
" 是一样的"
<<endl;
}
//if
else
{
cout<<str3<<
" 和 "
<<str4<<
" 是不一样的"
<<endl;
}
cout<<str3.substr(
6
,
5
)<<
" size->"
<<str3.substr(
6
,
5
).length()<<endl;
return
0
;
}
|
请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能
最新推荐文章于 2020-05-12 17:07:23 发布