概述
要使用 string 类,必须包含头文件 。string 类包含了 6 个构造函数。string 类支持 cin 方式和 getline() 方式两种输入方式。简单示例如下:
string stuff;
cin >> stuff;
getline(cin, stuff);
第一行是声明 string 类的对象 stuff,第二行是从屏幕读入输入的字符串,第三行同样实现第二行代码的功能。
string 类提供的各种操作函数大致分为八类:构造器和析构器、大小和容量、元素存取、字 符串比较、字符串修改、字符串接合、I/O 操作以及搜索和查找。
下表列出了 string 类的所有成员函数及它们的功能:
函数名称 | 功能 |
---|---|
构造函数 | 产生或复制字符串 |
析构函数 | 销毁字符串 |
=,assign | 赋以新值 |
Swap | 交换两个字符串的内容 |
+ =,append( ),push_back() | 添加字符 |
insert () | 插入字符 |
erase() | 删除字符 |
clear () | 移除全部字符 |
resize () | 改变字符数量 |
replace() | 替换字符 |
+ | 串联字符串 |
==,! =,<,<=,>,>=,compare() | 比较字符串内容 |
size(),length() | 返回字符数量 |
max_size () | 返回字符的最大可能个数 |
empty () | 判断字符串是否为空 |
capacity () | 返回重新分配之前的字符容量 |
reserve() | 保留内存以存储一定数量的字符 |
[],at() | 存取单一字符 |
>>,getline() | 从 stream 中读取某值 |
<< | 将值写入 stream |
copy() | 将内容复制为一个 C - string |
c_str() | 将内容以 C - string 形式返回 |
data() | 将内容以字符数组形式返回 |
substr() | 返回子字符串 |
find() | 搜寻某子字符串或字符 |
begin( ),end() | 提供正向迭代器支持 |
rbegin(),rend() | 提供逆向迭代器支持 |
get_allocator() | 返回配置器 |
构造函数和析构函数
- 构造函数,常见的 string 类构造函数有以下几种形式:
string strs //生成空字符串
string s(str) //生成字符串str的复制品
string s(str, stridx) //将字符串str中前stridx个元素作为构造函数的初值
string s(str, strbegin, strlen) //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值
string s(num, c) //生成一个字符串,包含num个c字符
如果字符串只包含一个字符,使用构造函数对其初始化时,使用以下两种形式比较合理:
std::string s('x'); //错误
std::string s(1, 'x'); //正确
或者:
std::string s("x"); //正确
即一个字符也应视为字符串。
- 析构函数:
~string() //销毁所有内存,释放内存
获取字符串长度
共4个函数:size() 和 length()、 maxsize() 和 capacity()
- size() 和 length(): 返回 string 类型对象中的字符个数,且它们的执行效果相同。
- maxsize(): 返回 string 类型对象最多包含的字符数。
- capacity(): 返回在重新分配内存之前,string 类型对象所能包含的最大字符数。
- reserve() 可以为 string 类型对象重新分配内存,重新分配的大小由其参数决定,默认参数为 0.
获取字符串元素
两种方法:下标操作符[] 和 成员函数at(),第 1 个字符索引(下标)为 0,最后的字符索引为 length()-1。
5. 下标操作符 []在使用时不检查索引的有效性,如果下标超出字符的长度范围,会导致未定义行为。
6. 函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。
字符串比较
- >、<、==、>=、<=、!=
对于参加比较的两个字符串,任一个字符串均不能为 NULL,否则程序会异常退出。 - compare():返回一个整数来表示比较结果。如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。string 类的比较 compare() 函数使用非常方便,而且能区分字母的大小写。建议读者多使用此函数。
字符串修改和替换
assign(),=,erase(),swap(),insert(), append() 函数。
符串输入输出操作
“<<” 和 “>>” ,getline() 函数
字符串查找
find()、 rfind()、find_first_of()、 find_last_of()、find_first_not_of()、 find_last_not_of()函数。
find_first_of() 函数可实现在源串中搜索某字符串的功能,该函数的返回值是被搜索字符串的第 1 个字符第 1 次出现的下标(位置)。若查找失败,则返回 npos。
find_last_of() 函数同样可实现在源串中搜索某字符串的功能。与 find_first_of() 函数所不同的是,该函数的返回值是被搜索字符串的最后 1 个字符的下标(位置)。若查找失败,则返回 npos。
find_first_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的第 1 个字符;
find_last_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的最后 1 个字符。