目录
- 引言
- 标准库中的string类
- string类的常用接口
- string类对象的常见构造
- string类对象的
- string类对象的访问及遍历
- string类对象的修改
- string类非成员函数
引言
什么是string类?
string 类是 C++ 标准库中的一个类,用于处理字符串。它提供了一系列方法来创建、操作和处理字符串,同时也隐藏了底层的内存管理细节,使得字符串操作更加方便和安全。
标准库中的string类
string类的文档介绍
string 类的一些常见特性和功能:
-
动态内存管理: string 类能够根据需要动态分配内存来存储字符串,因此可以适应不同长度的字符串而不需要提前指定字符串的大小。
-
字符访问和修改: 可以通过索引或迭代器来访问和修改字符串中的字符,也支持类似数组的下标访问方式。
-
字符串操作: 提供了丰富的字符串操作方法,如连接(concatenate)、截取(substring)、查找(find)、替换(replace)等。
-
输入输出支持: 可以方便地通过输入输出流进行字符串的读写操作,与其他标准输入输出类型兼容。与 C 字符串的转换: 支持与 C 风格字符串(以 null 结尾的字符数组)之间的转换,可以通过 c_str() 方法获取 C 字符串表示。
-
容器特性: string 类是标准库中的容器之一,因此支持类似于向量(vector)等容器的一些操作,如迭代器遍历、大小查询等。(但历史算是比较悠久,相较于其他的容器要早)
string类的常用接口
string类对象的常见构造
(constructor) 函数名称 | 功能说明 |
---|---|
string | 构造空的string类对象 |
string(const char s)* | 用C-string来构造string类对象 |
string(size_t n,char c) | string类对象中包含n个字符c |
string(const string& s) | 拷贝构造函数 |
void test1()
{
string s();
string s2("little zhu");
string s3(s2);
}
string类对象的
函数名称 | 功能说明 |
---|---|
size | 返回字符串有效字符长度 |
length | 返回字符串长度 |
capacity | 返回空间大小 |
empty | 检测字符串释放为空串,是return true ,不是反之 |
clear | 清空有效字符 |
reserve | 为字符串预留空间 |
resize | 将有效字符的个数改成 n 个(n为此函数的参数) ,多出的空间用字符c填充 |
注意:
- size()与length()方法底层实现是一样的
- clear()只是将string中的有效字符清空,不改变底层空间大小.
- resize(size_t n) 与resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
- reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于
string的底层空间总大小时,reserver不会改变容量大小。
string类对象的访问及遍历
函数名称 | 功能说明 |
---|---|
operator[] | 返回pos位置的字符,const string类对象调用 |
begin + end | begin 获取一个字符的迭代器+end 获取最后一个字符下一个位置的迭代器 |
rbegin + rend | begin获取一个字符的迭代器+ end获取最后一个字符下一个位置的迭代器 |
void test1()
{
string s();
string s2("little zhu");
string s3(s2);
string::iterator it = s2.begin();
while (it != s2.end())
{
cout << *it ;
it++;
}
cout << endl;
auto rit = s3.rbegin();
for (auto ch : s3)
{
cout << ch << endl;
}
}
int main()
{
test1();
return 0;
}
string类对象的修改
函数名称 | 功能说明 |
---|---|
push_back | 在字符串后尾插字符c |
operator+= | 在字符串后面追加字符串str |
append | 在字符串后追加一个字符串 |
c_str | 返回C格式字符串 |
find + npos | 从字符串pos位置开始往后找字符C,返回该字符中的位置 |
rfind | |
rfind | 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置 |
substr | 在str中从pos位置开始,截取n个字符,然后将其返回 |
void test1()
{
string s();
string s2("little zhu");
string s3(s2);
s2.push_back(' ');
s2.append("miss");
s2 += 've';
s2 += 'ry';
cout << s2 << endl;
cout << s2.c_str() << endl;
}
string类非成员函数
函数 | 功能说明 |
---|---|
operator+ | 由于传值返回,导致深拷贝效率低,不推荐使用 |
operator>> | 输入流运算符重载 |
operator<< | 输出流运算符重载 |
getline | 获取一行字符串 |
relational operators | 大小比较 |
void test2()
{
string s4;
cin >> s4;
cout << s4 << endl;
string s1 = "who ";
string s2 = "are ";
string s3 = s1 + s2;
cout << s3 << endl;
string s5;
getline(cin, s5);
cout << s5 << endl;
}
int main()
{
test2();
return 0;
}