- string()
构造空的string类对象,即空字符串;- string(const string& str)
用C-string来构造string类对象;- string(const string& str, szie_t pos, szie_t len = npos)
赋值str字符串从pos位置开始,并且跨越len长度(如果字符串太长或者太短就直接到结尾);- string(const char * s)
复制以空结尾的字符串序列;- string(const char * s, size_t n)
复制s中指向的前n个字符;- string (size_t n, char c)
用字符c的n个连续副本填充字符串;
1 #include<iostream>
2 using namespace std;
3 void StringTest1()
4 {
5 string s1;
6 cout << s1 << endl;
7 string s2("hello");
8 cout << s2 << endl; //hello
9 string s3(s2);
10 cout << s3 << endl; //hello
11 string s4(s2, 2, 2);
12 string _s4(s2, 2);
13 cout << s4 << endl; //ll
14 cout << _s4 << endl; //llo
15 string s5("hello world", 5);
16 cout << s5 << endl; //hello
17 string s6(10,'x');
18 cout << s6 << endl; //xxxxxxxxxx
19 }
20 int main()
21 {
22 StringTest1();
23 }
21 int main()
22 {
23 string s;
24 s.push_back('a');
25 s.push_back('b');
26 s.push_back('c');
27 s.push_back('d');
28 cout << s << endl; //abcd
29 return 0;
30 }
- string& insert (size_t pos, const string& str)
(在pos位置插入str副本)- string& insert (size_tpos, const char * s)
(在pos位置插入一个字符串)- iterator insert (iterator p, char c)
(pos位置插入字符c)
32 int main()
33 {
34 string s("hello ");
35 s.insert(6, "world");
36 cout << s << endl;//hello world
37
38 string s1("!!!");
39 s.insert(11, s1);
40 cout << s << endl;//hello world!!!
41
42 s.insert(s.end(), '@');
43 s.insert(s.begin(), '@');
44 cout << s << endl;//@hello world!!!@
45 return 0;
46 }
1.使用下标进行遍历
48 int main()
49 {
50 string s("hello");
51 size_t i = 0;
52 for(i = 0; i < s.size(); i++)
53 {
54 cout << s[i] << " ";//h e l l o
55 }
56 cout << endl;
57
58 for(i = 0; i < s.size(); i++)
59 {
60 s[i]++;
61 }
62 cout << s << endl;//ifmmp
63 return 0;
64 }
2.使用范围for进行遍历
49 int main()
50 {
51 string s("hello");
52 for(auto ch : s)
53 {
54 cout << ch;//hello
55 }
56 cout << endl;
57 for(auto& ch : s)
58 {
59 ch++;
60 }
61 cout << s << endl;//ifmmp
62 return 0;
63 }
- string& append (const string& str)
加一个str的副本- string& append (const char * s)
追加一个以NULL结尾的字符串- string& append (size_t n, char c)
追加n个字符c的连续副本
66 int main()
67 {
68 string s("hello");
69 s.append(" world");
70 cout << s << endl;//hello world
71
72 string s1("!!!");
73 s.append(s1);
74 cout << s << endl;//hello world!!!
75
76 s.append(3, '@');
77 cout << s << endl;//hello world!!!@@@
78 return 0;
79 }
83 int main()
84 {
85 string s("hello");
86 s.pop_back();
87 cout << s << endl;//hell
88 s.pop_back();
89 cout << s << endl;//hel
90 return 0;
91 }
- string& erase (size_t pos = 0, size_t len = npos)
从pos位置删除长度为len的字符串- iterator erase (iterator p)
删除p位置的字符- iterator erase (iterator first, iterator last)
删除[first, last)范围内的字符
93 int main()
94 {
95 string s("hello_world");
96 s.erase(0,6);
97 cout << s << endl;//world
98
99 s.erase(s.end()-1);
100 cout << s << endl;//worl
101
102 s.erase(s.begin()+1,s.end()-1);
103 cout << s <<endl;//wl
104 return 0;
105 }
- size_t find (const string& str, size_t pos = 0) const
正向搜索与str对象所匹配的第一个位置- size_t find (const char * s, size_t pos = 0) const
正向搜索与字符串s对象所匹配的第一个位置- size_t find (char c, size_t pos = 0) const
正向搜索与字符char对象所匹配的第一个位置
136 int main()
137 {
138 string s1("https://legacy.cplusplus.com/reference/string/string/find/");
139
140 string s2("cplusplus.com");
141 size_t pos1 = s1.find(s2);
142 cout << pos1 << endl;//15
143
144 size_t pos2 = s1.find("reference");
145 cout << pos2 <<endl;//29
146
147 size_t pos3 = s1.find(':');
148 cout << pos3 <<endl;//5
149 return 0;
150 }
- size_t rfind (const string& str, size_t pos = npos) const
反向搜索与str对象所匹配的第一个位置- size_t rfind (const char * s, size_t pos = npos) const
反向搜索与字符串s对象所匹配的第一个位置- size_t rfind (char c, size_t pos = npos) const
反向搜索与字符char对象所匹配的第一个位置
152 int main()
153 {
154
155 string s1("https://legacy.cplusplus.com/reference/string/string/find/");
156
157 string s2("string");
158 size_t pos1 = s1.rfind(s2);
159 cout << pos1 << endl;//46
160
161 size_t pos2 = s1.rfind("reference");
162 cout << pos2 <<endl;//29
163
164 size_t pos3 = s1.rfind('/');
165 cout << pos3 <<endl;//57
166 return 0;
167 }
- size_t size() const
- size_t length() const
107 int main()
108 {
109 string s("hello");
110 cout << s.size() << endl;//5
111 cout << s.length() << endl;//5
112 return 0;
113 }
- size_t max_size() const
115 int main()
116 {
117 string s("hello");
118 cout << s.max_size() <<endl;//4611686018427387897(Linux环境下)
119 return 0;
120 }
- size_t capacity() const
133 int main()
134 {
135 string s("hello");
136 size_t sz = s.capacity();
137 cout << sz << endl;//5
138 return 0;
139 }
1、与正向迭代器相关的函数
begin:返回一个指向字符串末尾后的字符的迭代器。
iterator end();
const_iterator end() const;
end:返回一个指向字符串末尾后的字符的迭代器。
iterator end();
const_iterator end() const;
122 int main()
123 {
124 string s("hello world");
125 string::iterator it = s.begin();
126 while(it != s.end())
127 {
128 cout << *it;
129 it++;
130 }
131 cout << endl;//hello world
132 return 0;
133 }
2、与反向迭代器相关的函数
rbegin:返回一个指向字符串最后一个字符的反向迭代器(即它的反向开头)。
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
rend:返回一个反向迭代器,指向字符串第一个字符前面的理论元素(被认为是字符串的反向结束)。
reverse_iterator rend();
const_reverse_iterator rend() const;
191 int main()
192 {
193 string s("hello world");
194
195 string::reverse_iterator rit = s.rbegin();
196 while(rit != s.rend())
197 {
198 cout << *rit;//dlrow olleh
199 rit++;
200 }
201 cout << endl;
202 return 0;
203 }
- string& operator= (const string& str)
替换当前内容为str对象- string& operator= (const char * s)
替换当前内容为s字符串- string& operator= (char c)
替换当前内容为字符char
205 int main()
206 {
207 string s1("hello");
208 string s2("world");
209
210 s1 = s2;
211 cout << s1 << endl;//world
212
213 s1 = "linux";
214 cout << s1 << endl;//linux
215
216 s1 = 'c';
217 cout << s1 << endl;//c
218 return 0;
219 }
- string& operator+= (const string& str)
在当前字符串末尾追加一个str对象- string& operator+= (const char * s)
在当前字符串末尾追加一个s字符串- string& operator+= (char c)
在当前字符串末尾追加一个char字符
221 int main()
222 {
223 string s("hello");
224 string s1(" world");
225
226 s += s1;
227 cout << s << endl;//hello world
228
229 s += "!!!";
230 cout << s << endl;//hello world!!!
231
232 s += '@';
233 cout << s << endl;//hello world!!!@
234 return 0;
235 }
- istream& operator>> (istream& is, string& str)
从输入流中提取一个字符串,将序列存储在str中,该序列被覆盖(str的先前值被替换)。- ostream& operator<< (ostream& os, const string& str)
将符合 str 值的字符序列插入到 ostream。
238 int main()
239 {
240 string s;
241 cin >> s;
242 cout << s << endl;
243 return 0;
244 }
方法1:
246 int main()
247 {
248 string s("wo lai le");
249 for(size_t i = 0; i < s.size(); i++)
250 {
251 if(s[i] == ' ')
252 {
253 s.insert(i, "20%");
254 i += 4;
255 }
256 }
257
258 for(size_t i = 0; i < s.size(); i++)
259 {
260 if(s[i] == ' ')
261 {
262 s.erase(i, 1);
263 }
264 }
265 cout << s << endl;//wo20%lai20%le
266 return 0;
267 }
方法2:
270 int main()
271 {
272 string s("wo lai le");
273
274 string news;
275
276 for(size_t i = 0; i < s.size(); i++)
277 {
278 if(s[i] == ' ')
279 {
280 news += "20%";
281 }
282 else
283 {
284 news += s[i];
285 }
286 }
287 cout << news << endl;//wo20%lai20%le
288 return 0;
289 }
- string substr (size_t pos = 0, size_t len = npos) const
返回一个新构造的字符串对象,其值初始化为此对象的子字符串的副本
291 int main()
292 {
293 string s("I am process");
294 string s1 = s.substr(2, 3);
295 cout << s1 << endl;//am
296 return 0;
297 }
size_t copy (char * s, size_t len, size_t pos = 0) const
将字符串对象当前值的子字符串复制到s所指向的数组中。该子字符串包含从位置pos开始的len个字符
300 int main()
301 {
302 string s("I am process");
303 char ch[20];
304
305 size_t length = s.copy(ch, 2, 2);
306 ch[length] = '\0';
307
308 cout << ch << endl;//am
309 return 0;
310 }
- const char c_str() const*
312 int main()
313 {
314 string s("hello world");
315 const char* str = s.c_str();
316 cout << str << endl;//hello world
317 return 0;
318 }
我们平时使用>>操作符是,遇见空格就会停止读取。
320 int main()
321 {
322 string s;
323 cin >> s;//hello world
324 cout << s << endl;//hello
325 return 0;
326 }
此时我们使用getline函数就可以很好的解决这个问题了
- istream& getline (istream& is, string& str, char delim)
- istream& getline (istream& is, string& str)
320 int main()
321 {
322 string s;
323 getline(cin, s);
324 cout << s << endl;
325 return 0;
326 }