小伙伴们大家好!今天给大家带来一个新的东东:string类!相信大家看到第一反应就是:”???”下面请容我这个练习时长两年半的练习生花上一丢丢时间为大家简单讲解:
一、初步认识string类
我们先不谈本篇文章的主题,我们先来谈谈C语言的字符串。C语言的库中也提供了一些函数让我们可以对字符串进行增删查改,虽然很好用,但是我们学了C++后总感觉这些函数与字符串时分离开来的,而且很容易会越界访问。所以,string应运而生!
1.概念:
string本质上是类,而通过它创建的对象本质上就是字符串(可以推断出类中的成员变量是char类型)
2.用法:
string既然是类,那么肯定就有成员函数(下文会介绍一些常用的成员函数),使用string类时需要引用 #include<string>头文件 以及 using namespace std
二、string类常用的接口(string类的成员函数)
s1、s2.....代表对象名称
1.创建对象(构造函数):
函数名称 | 功能说明 |
①string s1 | 默认初始化,s1为空串 |
②string s1(const char* s) | 将常量字符串赋值给字符串s1 |
③string s1(size_t n,char c) | 创建由n个字符c组成的字符串s1 |
④string s1(const string& s2) | 拷贝构造函数,字符串s2赋值给字符串s1 |
注意事项:还有另外几种:①string s1 = “vulgar” ②string s2 = s1
2.容量操作:
函数名称 | 功能说明 |
①size() | 返回对象的长度 |
②empty() | 检测对象(字符串)是否为空串, 是返回true,否返回false |
③clear() | 清除字符串中的有效字符,不改变空间大小 |
④reserve(size_t n) | 为字符串预留空间(下文详解) |
⑤reverse(s1.begin(),s1.end()) | 逆置字符串s1 |
⑥resize(size_t n) | 将字符串有效字符个数改为n个(下文详解) |
注意事项:
④reserve(size_t n)函数:为字符串预留空间,参数为 n 。
当 n > 字符串长度时,字符串空间扩充为n。
当 n < 字符串长度时,不改变字符串大小。
⑥resize(size_t n)函数:改变字符串有效字符个数,参数为 n 。
当 n > 字符串长度时,字符串空间扩充为n,剩余部分用0填充(resize(size_t n , char c)用字符c来填充)。
当 n < 字符串长度时,不改变字符串大小。
3.string类对象访问及遍历:
函数名称 | 功能说明 |
①operator[] | 与C语言中的[]相同,不多做解释 |
②begin(s1)、end(s1) | 获取字符串开始位置的迭代器 获取字符串最后位置的下一个位置迭代器 |
③rbegin(s1)、rend(s1) | 获取字符串最后位置的迭代器 获取字符串开始位置的前一个位置迭代器 |
④for() | 范围for,更简洁的循环遍历函数(下文实例) |
注意事项:
④范围for实例:
for(auto c : s1)//auto:自动匹配变量对应的类型
{
cout << c << endl;
}
4.string类对象修改操作:
函数名称 | 功能说明 |
①push_back(c) | 将字符c尾插进字符串中 |
②operator += | 在字符串后追加字符串(与C中变量+=相同) |
③c_str() | 返回c格式的字符串(数据是临时的) |
④find()/rfind() | 查找字符,返回位置(下文详解) |
⑤substr(s1,a,b) | 截取字符串 s1:字符串,a:开始截取的位置,b:截取长度 |
⑤getline() | 获取一行字符串 |
注意事项:
④find(函数):
find(const char* s )const;
find(const char* s , size_t pos = 0)const;
find(const char* s , size_t pos , size_t n)const;
s代表将要查找的字符串,pos代表查找的位置,n代表查找的字符个数
((1)pos是个缺省值为0,(2)当n > s的个数时,就会返回nops(nops是-1,显示则是值非常大的数))
find(从左向右)、rfind(从右向左)
码字不易,有收获的小伙伴们动动手指点个赞!!!