1. 为什么要学习string类
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。
2. 标准库的string类
string类的文档介绍
在使用string类时,必须包含#include头文件以及using namespace std;
2.1 string的构造函数
(1)无参构造(重点)
C++为了与C语言的<string.h>
区分开,是不会加 .h 的(C++的头文件<string>
)
string();
无参构造的string内是没有元素的。
#include<iostream>
#include<string>
using namespace std;
void test_string_Construct()
{
string s1;
cout << s1 << endl;
}
注意:我们这里是使用的<<
是string类实现的全局输出函数(string类还实现了>>
输入函数)
(2)用字符串初始化(重点)
string (const char* s);
文档内容:
Copies the null-terminated character sequence (C-string) pointed by s.
将C字符串拷贝给对象。
string s2("Hello World");
(3)用字符串的前n个字符初始化
string (const char* s, size_t n);
拷贝C字符串的前n个字符到string类的对象
string s3("Hello World", 5);
(4)拷贝构造(重点)
string (const string& str);
一个str初始化一个新对象
string s2("Hello World");
string s4(s2);
(5)拷贝str的一部分
string (const string& str, size_t pos, size_t len = npos);
pos为拷贝的开始位置,len为拷贝的字符个数,npos是string的成员常量
代表如果没给拷贝的字符个数,默认拷贝到str的\0
没有给要拷贝的个数
string s5(s2, 6);
cout << s5 << endl;
给了拷贝的个数
string s6(s2, 6, 3);
cout << s6 << endl;
(6)拷贝n个字符
string (size_t n, char c);
用n个字符拷贝初始化str
string s7(5, 'x');
cout << s7 << endl;
(7)用迭代器初始化
template <class InputIterator>
string (InputIterator first, InputIterator last