string容器

string 容器

1
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
//
// Created by Jason on 2020/3/29.
//
/*
* string 容器
* string构造函数
string()创建一个空的字符串例如: string str;
string( const string&str):/使用一个 string对象初始化另一个 string对象
string( const char*s)://使用字符串s初始化
string( int n, char c)://使用n个字符c初始化
string基本赋值操作
string& operat or=( const char*s)://char*类型字符串賦值给当前的字符串
string& operat or=( onst string &s):/把字符串s赋给当前的字符串
string& operat or=(harc):;/字符赋值给当前的字符串
string& assign( const char*s);/把字符串s赋给当前的字符串
string& assign( const char*s,intn)://把字符串s的前n个字符赋给当前的字符串
string& assign( const string&s);/把字符串s赋给当前字符串
string& assign(int n, char c)://用n个字符c赋给当前字符串
string& assign( const string&s, int st art,intn)://将s从 start开始n个字符赋值给字符串
string 存取字符操作
char*operator[](int n)//通过[]的方式获取字符
char& at (int n)//通过at方法获取字符

3.12.4 string拼接操作
string& operat or+=( const string& str):/重载七操作符
string& operat or+=( const char*str):/重载+操作符
string& operat or+=( canst char c):/重戴+操作符
string& append( const char*s)://把字符串s连接到当前字符串结尾
string& append( const char*s,intn):/把字符串s的前n个字符连接到当前字符串结尾
string& append (const string &3): //B operator=O+
string& append( const string &s, ant pos,intn):/把字符串s中从pos开始的n个字符连接到
当前字符串结尾
string& append(itn, char c)://在当前字符串结尾添加n个字符c
3.12.5 string查找和替换
int find( const string& str, ant pos=0) const;/查找str第一次出现位置,从pos开始查找
int find( const char*s, ant pos=0) const;//查找s第一次出现位置,从pos开始查找
int find( const char*s, Int pos,irtn)cnst;∥从pos位置查找s的前n个字符第一次位置
int find( const char c, ant pos=0) const:/查找字符c第一次出现位置4
int rfid(const stringl&str, ant pos=mpos) const:/查找str最后一次位置,从pos开始查找
int find (const char*s, int pos=mpos) const:/查找s最后一次出现位置,从pos开始查找
int rfid(const char*s, lnt pos,intn) const://Npos查找s的前n个字符最后一次位置
int find(const char c, int pos=0) const:/查找字符c最后一次出现位置
replace( ant pos, int n, const string& str)://替换从pos开始n个字符为字符串st
string& rep1ace( ant pos,intn, const char*s);//替换从pos开始的n个字符为亨符串s
3.12.6 string比较
大写的A比小写的a要小,因为比的是字符串
int compare (const string&s)const//与字符串s比较
int compare(const char*s)const //与字符串s比较
3.12.7 string字串
string substr(int pos=0;int n= pos)const//返回由pos 开始的n个字符组成的字符串
string substr(pos)const//返回由pos 开始到字符串结束的字符串


3.12.8 string插入和删除操作
string& insert( int pos, const char*s)://插入字符串
string& insert( int pos, const string& str)://插入字符串
string& insert( ant pos,int n, char c):/在指定位置插入n个字符c
string& erase( int pos,int n=pos):/刪除从Pos开始的n个字符
3.12.9string和c-stye字符串转换
string str="toast";// string转char*
const char *cstr= str c_str();
char*s=“ toast";//char*转 string
string str(s)

补充说明:: transform(a.begin(),a.end(),a.begin(),::toupper)可以将整个字符串中 的英文变成大写!


* */
#include<bits/stdc++.h>
using namespace std;
void test01()
{
//构造
string s1;
string s2(s1);//拷贝构造
string s3("有参构造");
string s4(10,'c');//两个参数的有参
cout<<s3<<endl;
cout<<s4<<endl;

string s5;
s5=s4;
s5.assign("abcdefg",3);
cout<<s5<<endl;

string s6="abcdefg";
string s7;
//assign是从0开始计算的
s7.assign(s6,3,3);
cout<<s7<<endl;
}

void test02()
{
string s = "hello world";
// for(int i = 0;i<s.size();i++)
// {
// cout<<s[i]<<endl;
// cout<<s.at(i)<<endl;
// }
//at 和中括号的区别:【】访问越界,会直接挂掉,at访问越界,会抛出一个异常
try {
// s[100];
s.at(100);
}
catch (out_of_range&e)
{
cout<<e.what()<<endl;
}
}

void test03()
{
string str1 = " I";
string str2 = " LOVE BEIJING";
str1+=str2;
cout<<str1<<endl;
string str3 = "天安门";
str1.append(str3);
cout<<str1<<endl;
string str4 = "abcdefg ";
str4.replace(1, 3, "111111");//替换从pos开始n个字符为字符串st
cout<<str4<<endl;
int pos = str4.find("den");
int pos2 = str4.rfind("de",6);//rfind从右往左找
//查到了,返回第一个数字所在位置
//查不到,返回-1;
cout<<"Pos ="<<pos<<endl;
cout<<"Pos ="<<pos2<<endl;
}

void test04()
{
string str1 ="abbcde";
string str2="aacdef";
if(str1.compare(str2)==0)
{
cout<<"str1==str2"<<endl;
}else if(str1 .compare(str2)>0) {
cout<<"str1>str2"<<endl;
}else cout<<"str1<str2"<<endl;
}
/**********************************************************/
void test05()
{
string str1 ="abcde";
string subStr = str1.substr(1,3);
cout<<subStr<<endl;

string email = "2697767160@qq.com";
int pos = email.find("@");
string usrName = email.substr(0,pos);
cout<<usrName<<endl;//不需要做+1,-1的操作!
}
void test06()
{
//需求,讲网址中的每个单词都截取到容器当中
string str1 = "www.itcast.com.cn";
vector<string>v;
//需要截取 www, itcast , com, cn;
int start = 0;
while(true)
{

int pos = str1.find(".",start);
if(pos==-1)
{
//将最后一个单词截取处理
string tmp = str1.substr( start,str1.size()-start);
v.push_back(tmp);
break;
}
string tmp = str1.substr( start,pos-start);
v.push_back(tmp);
start = pos+1;

}
for(vector<string>::iterator it = v.begin();it!= v.end();it++)
{
cout<<*it<<endl;
}
}
void test07()
{
string str = "hello";
str.insert(1,"111");
cout<<str<<endl;
//利用erase 删除掉111
str.erase(1,3);
cout<<str<<endl;
}
void doWork(string s)
{

}
void doWork2(const char*s)
{

}
void test08()
{
//char*->string
char*str = "hello";
string s (str);
//string -> char*
const char*str2 = s.c_str();
doWork(str2);//编译器 将 const char* 隐式转换为string
/*doWork2(s);*/ //编译器不会讲string 隐式类型转换为const char*

}
void test09()
{
string s = "abcdefg";
char& a = s[2];
char& b = s[3];
a='1';
b='2';
cout<<s<<endl;
cout<<(int*)s.c_str()<<endl;
s ="ppppppppppppppppppppppppppppppppppppppppppppppppp";//重新分配内存,之前会失效
a='1';
b='2';
cout<<s<<endl;
cout<<(int*)s.c_str()<<endl;

}
/************************************************************************/
//把小写字符改成大写字母
void test10()
{
string str = "abCDEfG";
for(int i = 0;i<str.size();i++)
{
str[i]= toupper(str[i]);
//小写转大写
}
cout<<str<<endl;
for(int i = 0;i<str.size();i++)
{
str[i]= tolower(str[i]);
//大写转小写
}
cout<<str<<endl;
}
int main()
{
test10();
// test09();
// test08();
// test07();
// test06();
// test05();
// test04();
// test03();
// test01();
// test02();
system("pause");
return 0;
}
-------------本文结束,感谢您的阅读-------------