一.strng类的介绍
简单的说:
string是表示字符串的字符串类,类里面提供了许多对字符串操作的函数;
string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits,
allocator> string;
其中, 注意: 在使用string类时,必须包含#include头文件以及using namespace std;
二.string类常用函数及用法
1.string类对象常见的构造
(1) string()
功能:构造一个长度(大小)为0的空字符串;
【例子】
(2)string(const char* s)
功能:构造一个用字符串s初始化的字符串
【例子】
(3)string(const string& str)
功能:用字符串str拷贝构造一个字符串
【例子】
(4)string(size_t n,char c)
功能:构造一个用n个字符c初始化的字符串
【例子】
2.string类对象的容量操作
(1)size ( )
功能:返回字符串有效字符长度
【例子】
(2)length( )
功能:和size一样,返回字符串有效字符的长度
【例子】
(3)capicity( )
功能:返回字符串总空间的大小 注意:编译器不同得出得值不同;
【例子】
(4)empty( )
功能:检测字符串是否为空
【例子】
(5)clear( )
功能:清空字符串中得有效字符清空,但不会影响
注意:clear只是将有效字符清空,但不会影响底层总空间的大小
【例子】
(6)reserve (size_t n)
功能:为string预留空间,不改变有效元素个数(如下例一),当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小(如下例二),只影响容量,不影响数据 ;
注意:当使用reverse要扩容到某个值时,实际中编译器不一定会扩容到指定值,可能会多扩容点,不同的编译器结果不同;
【例一】
【例二】
(7) void resize (size_t n)
void resize (size_t n, char c)
功能:将字符串有效长度改为N个,不同的是当字符个数增多时:resize(n) 用 /0 来填充多出的元素空间(如下例一),resize(size_t n, char c)用字符 c 来填充多出的元素空间(如下例二);
注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变;
【例一】
【例二】
3. string类对象的访问及遍历操作
下标遍历
(1)operator[]
char& operator[] (size_t pos); //可读可改 例一
const char& operator[] (size_t pos) const; //只读不能改 例二
功能:类似于数组下标访问
其中:下标+[ ]只适用于部分容器,底层物理空间具有一定连续性的链式结构;
例一:
【例二】
迭代器遍历 正向迭代器(iterator)
(2)begin() 返回指向第一个字符的迭代器
iterator begin(); //可读可写
const_iterator begin() const; //只读不能写 【如例二】
end() 返回指向最后一个字符下一个字符的迭代器
iterator end();
const_iterator end() const;
注意:迭代器适用于所以容器,迭代器才是容器遍历的主流形式;
【例一】
【例二】
迭代器倒序遍历 反向迭代器(severse_itreator)
(3)rbegin() 返回指向字符串最后一个字符(即其反向开头)的反向迭代器
rend () 返回指向字符串第一个字符(即其反向结尾)的反向迭代器
【例子】
注意匹配使用:
const_iterator it 本质保护迭代器指向的内容不能修改;
const iterator it 是迭代器本身不能被修改;
在使用迭代器遍历时,迭代器本身是要修改的 ;
(3) 范围for遍历
【例子】
4.string类对象的修改操作
(1)push_back(char c)
功能:在字符串后面尾插一个字符c
【例子】
(2)pop_back()
功能:尾删一个字符
【例子】
(3)append
功能:在字符串后面追加一个字符串
【例子】
运行结果:
(4)operator+=
功能:在后面追加字符串str,追加一个字符,追加string对象
【例子】
(5)find+npos
功能:从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置,如果没有找到,就返回npos,注意:npos是string类域里面的,使用时需要指定类域【例二】;
如果后面不加起始寻找的位置坐标,则默认是从0开始;
【例一】
【例二】
(6)rfind
功能:从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
其中,每个使用方法和find一样,只是是从后往前找
【例子】
(7)substr()
功能:在str中从pos位置开始,截取len个字符,然后将其返回,当不传入len参数时,默认全部截取
【例子】
(8) c_str
功能:返回C格式字符串
【例子】
(9)erase
功能:从pos位置开始,删除len个字符;
【例子】
(10)insert()
功能:在pos位置插入字符或字符串
【例子】