大家好鸭
见字如面,已经有好久没有写文章了,这段时间忙着学习,也忙着玩,所以停更了一段时间
今天让我们来谈一谈关于C++中的string类
什么是string类?
在c语言中我们操作字符串往往采用指针,这样的访问方式并不安全,有可能会导致越界,使用起来并不方便,string类封装了字符串的操作
为什么我们需要string类?
c语言中的字符串操作不符合OOP思想,使用string类可以使各种库函数方便访问,string类的出现使字符串操作方便快捷
string类接口
string类构造函数
string的构造函数有7种,但常有的有4种
string();//默认初始化
string(const char* s);//使用字符串初始化
string(size_t n, char c);//使用n个字符c初始化
string(const string & s);//使用另一个string类去初始化
string对象的容器操作
size函数和length函数一样都是返回string中的字符个数,不包括\0
string mystring;
mystring.size();
使用时在string变量后面跟上.siez() 调用函数
max_size函数返回string可以存放的最大字符个数,但没什么用,存放个数与存储空间有关,返回的值并不能表示最大存储个数
resize函数有两种使用方式
resize(size_t n)//将有效字符个数变为n个,如果n小于当前有效字符个数则在n+1位置放置一个\0
//若n大于当前有效字符个数则使用\0填充到n个有效字符
resize(size_t n,char c)//和上面一样,但填充时采用char c填充
capacity函数,查看当前可容纳的字符个数
reverse函数,开空间的函数,可以将空间开到n个,当知道string大概有几个字符时可以使用这个提前开好空间
clear函数,清除当前的所有字符串,但容量不变
empty函数,查看string是否为空,空返回true,非空返回false
string类的访问
本文介绍string类的各种常见的访问方式
string类中重载了operator[]
这string类可以直接像数组一样访问,括号中的数字为下标
string add("abcdef");
for (int i = 0; i < add.size(); i++)
{
cout << add[i] << endl;
}
这是一种遍历数组的方式
另外stirng类还有对应的迭代器,可以通过迭代器遍历string类
string add("abcdef");
auto it = add.begin();
while (it != add.end())
{
cout << *it << endl;
++it;
}
这两者最后遍历的效果是一样的
为了方便头和尾的访问stirng引入了back和front
string add("abcdef");
add.back() = 'x';
add.front() = 'x';
cout << add << endl;
效果如下
back和front是直接指向最后一个字符和第一个字符
string类的修改操作
第一个push_back
用于在尾部再增加一个字符
第二个operator+=
用于在尾部增加字符串或单个字符
这个使用比push_back方便,可以代替使用
第三个append
这个用于在尾部增加字符串,也可以被+=代替
第四个assign
这个函数是对string类进行重新赋值,具体的接口有很多,
string& assign (InputIterator first, InputIterator last)
这个写题的时候用的多
第五个insert和erase
insert函数可以在指定位置插入字符串,字符,n个字符
也支持在迭代器位置插入n个字符,或一个字符,或一段迭代器区间
erase函数在指定位置删除长度为npos的字符串
也可以单独删除一个迭代器位置
或删除一段迭代器区间
其他string函数
c_str函数
返回c语言形式的字符串,用于和一些函数对接,因为存在一些函数检查的是c语言类型的字符串
find函数
在指定位置查找字符串或者字符
substr函数
在指定位置截取长度为n的字符串,并返回
getline函数
这个函数可以在输入的时候避免空格中断输入
string的各种常用函数就介绍到这里,如有错误还请不吝赐教,谢谢大家