C++入门基础(十二) string类的常用接口

28 篇文章 0 订阅
9 篇文章 0 订阅

  string类的出现是对于C语言中的str系列库函数的升级版,主要是用来处理一系列字符串类型的操作,具有相当大的作用,这里我们介绍其几个常用的接口,并在下一篇文章中通过代码模拟出其在底层的实现。

1. string类对象的常见构造

函数名称函数功能
string()构造空的string类对象,即空字符串
string(const string&s)拷贝构造函数
string (const string& str, size_t pos, size_t len = npos)从当前字符串的第pos个位置获取len个元素的字符串
string(const char* s)用一个字符串常量来构造string类对象
string (const char* s, size_t n)从一个字符串中获取n个元素
string(size_t n, char c)string类对象中包含n个字符c

使用string类代码演示:

#include<string>
#include<iostream>
using namespace std;
void test()
{
	string str1;//创建空的string对象
	string strcopy(str1);//通过str1创建拷贝的string对象
	string str3("abcd");//通过常量字符串创建string对象
	string str4("abcdefg", 1,2);//从当前字符串的第1个位置获取两个元素作为str4中的字符串
	string str5(str3, 2);//从一个string类对象的字符串中获取2个字符
	string str6(6, 'a');//创建一个由6个a组成的字符串

}
int main()
{
	test();
	return 0;
}

在这里插入图片描述

2.string类对象的赋值

string& operator= (const string& str)赋值对象是一个string对象
string& operator= (const char* s)赋值对象是一个字符串常量
string& operator= (char c)赋值对象是一个字符

使用string类代码演示:

string str1;
	string str2(6, 'a');//创建一个由6个a组成的字符串
	str1 = str2;//赋值对象是一个string对象
	string str3;
	str3 = "abcde";//赋值的对象是一个字符串常量
	string str4;
	str4 = 'a';//复制到对象是一个字符

在这里插入图片描述

3.string类对象字符访问

方式一、通过[]

char& operator[] (size_t pos)访问一个位置,返回引用,可以修改
const char& operator[] (size_t pos) const访问一个位置,返回const引用,不可修改
const char& ch=str1[2];
ch='b';//会报错不可修改
char& ch1=str2[3];
ch1='d';//允许修改

方式二、通过at

char& at (size_t pos)访问一个位置pos,返回引用,可以修改
const char& at (size_t pos) const访问一个位置,返回const引用,不可修改
const char& ch=str1.at(2);
ch='b';//会报错不可修改
char& ch1=str2.at(3);
ch1='d';//允许修改

【区别】
[]越界会报断言错误
at越界会抛出异常

4.string类对象的容量操作

size返回字符串有效字符长度,不包括’\0’
length返回字符串有效字符长度
capacity返回空间总大小
empty检测字符串释是否为空串,是返回true,否则返回false
clear清空有效字符
reserve为字符串预留空间,即开辟指定字符串存储空间
resize将有效字符的个数扩展成n个,多出的空间用指定值填充

代码示例:


	string str1;
	cout << str1.size() << endl;
	str1.resize(10);//预留10个空间
	cout << str1.size() << endl;
	string str2("123456");
	cout <<"the size is :"<< str2.size() << endl;//size表示有效字符的长度
	cout <<"the length is :"<< str2.length() << endl;//length表示有效字符的长度
	cout << "the capacity is :"<<str2.capacity() << endl;//默认开辟容量为十五
	str2.resize(10, 'a');//预留10个空间,多余的空间用字符a填充
	cout << str2<< endl;
	cout <<"the str2 is empty?: "<< str2.empty() << endl;//判断是否为空的字符串,是则返回true,不为空则返回false
	str2.clear();
	cout << "the change size is :" << str2.size() << endl;
	cout << "the change length is :" << str2.length() << endl;
	cout << "the change capacity is :" << str2.capacity() << endl;

对应代码输出如图:
在这里插入图片描述

5.string类中的迭代器

iterator begin()指向第一个元素,可以进行修改,访问时若需要访问下一个位置则加加
const_iterator begin() const指向第一个元素,不可以进行修改,访问时若需要访问下一个位置则加加
iterator end()指向最后一个元素的下一个位置,可以修改,,访问时若需要访问下一个位置,则减减
const_iterator end() const指向最后一个元素的下一个位置,不可以修改,,访问时若需要访问下一个位置,则减减
reverse_iterator rbegin()反向迭代器,指向最后一个元素的位置,可以修改,访问时若需要访问前一个位置则加加
const_reverse_iterator rbegin() const反向迭代器,指向最后一个元素的位置,不可以修改,访问时若需要访问前一个位置则加加
reverse_iterator rend()反向迭代器,指向第一个元素的前一个位置,可以修改,访问时若需要访问下一个位置,则减减
const_reverse_iterator rend() const反向迭代器,指向第一个元素的前一个位置,不可以修改,访问时若需要访问下一个位置,则减减

代码示例如下

string str1("abcdefg");
	const string str2("123456");
	string::iterator it1 = str1.begin();//begin迭代器,可以修改
	cout << "it1: " << *it1 << endl;
	string::const_iterator it2 = str2.begin();//常量下begin迭代器,不可以修改
	cout << "it2: " << *it2 << endl;
	string::iterator it3 = str1.end();//begin迭代器,可以修改
	cout << "it3: " << *(it3-1) << endl;
	string::const_iterator it4 = str2.end();//常量下begin迭代器,不可以修改
	cout << "it4: " << *(it4-1) << endl;
	string::reverse_iterator it5 = str1.rbegin();//rbegin反向迭代器,可以修改
	cout << "it5: " << *it5 << endl;
	string::const_reverse_iterator it6 = str2.rbegin();//rbegin反向迭代器,不可以修改
	cout << "it6: " << *it6 << endl;
	string::reverse_iterator it7 = str1.rend();//rend反向迭代器,可以修改
	cout << "it7: " << *(it7-1) << endl;
	string::const_reverse_iterator it8 = str2.rend();//rend反向迭代器,不可以修改
	cout << "it8: " << *(it8-1)<< endl;

在这里插入图片描述

6.三种常见遍历方式

方式一、通过[]

for (size_t i=0;i<str.size();++i)
{
.....
}

方式二、通过for

for(const auto& ch : str)//要自己写begin,end迭代器
{
...
}

方式三、迭代器

string::iterator it=str.begin;
while(it != str.end())
{
...
it++;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值