【C++】顺序容器(四):额外的string操作
9.5 额外的 string 操作
除了之前文章当中分享的顺序容器的共同操作,string 类型还提供了一些额外的操作。
这些操作中的大部分:
- 要么是提供 string 类和 C 风格字符数组之前的相互转换;
- 要么是增加了允许我们用下标代替迭代器的版本;
9.5.1 构造 string 的其它方法
string 类型还支持额外三个构造函数:
- string s(cp, n):s 是 cp 指向的数组中前 n 个字符的拷贝。此数组应至少包含 n 个字符;
- string s(s2, pos2):s 是 string s2 从下标 pos2 开始的字符的拷贝。若 pos2 > s2.size(),构造函数的行为未定义;
- string s(s2, pos2, len2):s 是 string 对象 s2 从下标 pos2 开始 len2 个字符的拷贝。
substr 操作
substr 操作返回一个 string,它是原始 string 的一部分或全部的拷贝。用法如下:
- s.substr(pos, n):返回一个 string,包含 s 从 pos 开始的 n 个字符的拷贝。pos 的默认值是 0。n 的默认值是 s.size() - pos,即拷贝从 pos 开始的所有字符。
9.5.2 改变 string 的其他方法
string 类型支持顺序容器的赋值运算符以及 assign、insert 和 erase 操作。此外,它还定义了额外的 insert 和 erase 版本。
标准库的 string 类型还提供了接;受 C 风格字符数组的 insert 和 assign 版本。例如,我们可以将以空字符结尾的字符数组 insert 到或 assign 给一个 string:
const char *cp = "test for string assignment";
s.assign(cp, 7);// s == "test fo"
s.insert(s.size(), cp + 7);// s == "test for string assignment"
append 和 replace 函数
string 类定义了两个额外的成员函数:append 和 replace,这两个函数可以改变 string 的内容。
- append 操作是在 string 末尾进行插入操作的一种简写形式;
- replace 操作是调用 erase 和 insert 的一种简写形式;
append 操作的一个例子如下:
string s("C++ Primer"), s2 = s;
s.insert(s.size(), " 4th Ed.");// s == "C++ Primer 4th Ed."
s2.append("4th Ed.");// s == "C++ Primer 4th Ed."
需要注意的是,append 操作执行插入的位置仅在调用该成员的 string 对象的末尾。
replace 操作是调用 erase 和 insert 的一种简写形式:
s.erase(11, 3);// s == "C++ Primer Ed.:" 删除了上例 s 中的 4th Ed.
s.inseert(11, "5th");// s == "C++ Primer 5th Ed."
s2.replace(11, 3, "5th");// s2 == "C++ Primer 5th Ed."
在上述 replace 的调用中,s2 从位置 11 开始删除了包括第十一个字符(4)在内的三个字符(4th),并在 11 位置插入 5th。
改变 string 的多种重载函数
改变 string 的函数 append、assign、replace等有多个重载的版本。
9.5.3 string 搜索操作
string 类提供了 6 个不同的搜索函数,每个函数都有 4 个重载版本。
string 搜索操作如下:
- s.find(args):查找 s 中 args 第一次出现的位置;
- s.rfind(args):查找 s 中 args 最后一次出现的位置;
- s.find_first_of(args):在 s 中查找 args 中任何一个字符第一次出现的位置;
- s.find_last_of(args):在 s 中查找 args 中任何一个字符最后一次出现的位置;
- s.find_first_not_of(args):在 s 中查找第一个不在 args 中的字符;
- s.find_last_not_of(args):在 s 中查找最后一个不在 args 中的字符;
args 必须是以下形式之一:
- c, pos:从 s 中位置 pos 开始查找字符 c,pos 默认为 0;
- s2, pos:从 s 中位置 pos 开始查找字符串 s2,pos 默认为 0;
- cp, pos:从 s 中位置 pos 开始查找指针 cp 指向的以空字符结尾的 C 风格字符串。pos 默认为 0;
- cp, pos, n:从 s 中位置 pos 开始查找指针 cp 指向的数组的前 n 个字符。pos 和 n 无默认值0;
每个搜索操作返回一个 string::size_type 值,表示匹配发生位置的下标。如果搜索失败,返回一个名为 string::npos 的 static 成员。标准库将 npos 定义为一个 const string::size_type 类型,并初始化为值 -1。
指定从哪里开始搜索
通过指定 args 当中的参数 pos 来完成。默认值为 0,表示从头开始搜索。
逆向搜索
标准库的 rfind 提供了从右向左对字符串进行搜索的功能。
9.5.4 compare 函数
除了关系运算符外,标准库 string 类型还提供了一组 compare 函数,这些函数类似于 C 标准库当中的 strcmp 函数。
9.5.5 数值转换
C++ 11 标准引入了多个函数,可以实现数值数据与标准库 string 之间的转换:
- to_string(val):一组重载函数,返回数值 val 的 string 表示;
- stoi(s, p, b):返回 s 的起始子串的数值;
- stol(s, p, b);
- stoul(s, p, b);
- stoll(s, p, b);
- stoull(s, p, b);
- stof(s, p):返回 s 的起始子串的数值;
- stod(s, p);
- stold(s, p);
从上表中可以看到,C++ 11 标准提供了一组重载函数 to_string 来将数值转换为 string 对象,而针对多种不同类型的数值,分别根据类型提供了对象的字符串 string 转数值操作。
原文地址:https://blog.csdn.net/Coffeemaker88/article/details/144069904
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!