C++初识string(一)

1.string类(了解)

  1. 字符串是表示字符序列的类
  2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
  5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
    总结:
  6. string是表示字符串的字符串类
  7. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  8. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
  9. 不能操作多字节或者变长字符的序列。
    在使用string类时,必须包含#include头文件以及using namespace std;

2.string类的常用接口

2.1string类对象的常见构造

在这里插入图片描述
在这里插入图片描述

2.2string类对象的容量操作

在这里插入图片描述
size,length,capacity:

	// 注意:string类对象支持直接用cin和cout进行输入和输出
	string s("This is C++");
	cout << s.size() << endl;
	cout << s.length() << endl;
	cout << s.capacity() << endl;

在这里插入图片描述
clear:

	s.clear();
	cout << s.length() << endl;
	cout << s.capacity() << endl;

在这里插入图片描述
resize:

	string s("This is C++");
	cout << s.size() << endl;

	s.resize(16);

在这里插入图片描述
reserve:

void Teststring2()
{
	string s1;
	s1.reserve(10);
	s1.reserve(20);
}

在这里插入图片描述

resize和reserve的作用
resize:既要开好空间,又要对空初始化,就用resize
reserve:如果我们知道需要多少空间,直接一次性开好,不用增容提高效率

reserve的增容

void TestPushBack()
{
	//测试扩容
	string s;
size_t sz = s.capacity();
cout << "making s grow:\n";
for (int i = 0; i < 100; ++i)
{
	s.push_back('c');
	if (sz != s.capacity())
	{
		sz = s.capacity();
		cout << "capacity changed: " << sz << '\n';
	}
}
}

在这里插入图片描述

2.3string类对象的访问及遍历操作

在这里插入图片描述
**operator[]**可以向数组一样访问

	string s("wuyanzu");
	//下面既可以输出也可以修改字符串,第一种string用的最多
	//1.for+operator
	for (size_t i = 0; i < s.size(); ++i)
	{
		cout << s[i] << " ";
	}
	cout << endl;
	//2.迭代器
	string::iterator it = s.begin();
	while (it !=s.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
	//3.范围for
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;

在这里插入图片描述
rbegin+rend
在这里插入图片描述

2.4string类对象的修改操作

在这里插入图片描述
push_back,append,operator+=

void TestString()
{
	string s;
	s.push_back('+');//只能尾插字符
	cout << s << endl;
	s.append("+cang");//可以插字符有可以插字符串
	cout << s << endl;
	//推荐使用+=
	s += "jing";
	cout << s << endl;
	s += 'A';
	cout << s << endl;
}

在这里插入图片描述
find+npos

void TestString2()
{
	string url("http://www.cplusplus.com/reference/string/string/find/");
	//先找到//
	size_t pos1 = url.find("://");
	if (pos1 != string::npos)
	{
		//substr是子串,从0到pos-0
		string protocol = url.substr(0, pos1 - 0);
		cout << "protocol:"<<protocol << endl;
	}
	//从w开始找
	size_t pos2 = url.find('/',pos1+3);
	if (pos2 != string::npos)
	{
		//substr是子串,从0到pos-0
		string domain = url.substr(pos1+3,pos2-(pos1+3));
		cout << "domain"<<domain << endl;
	}
	//从pos2的位置到后面的都是uri
	string uri = url.substr(pos2);
	cout << "uri:"<<uri << endl;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
string常用的就结束了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_End丶断弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值