String

c++中定义一个字符串变量可以直接使用string

	string str = "zyt";

string 有许多方法:

元素访问:

at

访问指定字符,有边界检查
(公开成员函数)

operator[]

访问指定字符
(公开成员函数)

front

(C++11)

访问首字符
(公开成员函数)

back

(C++11)

访问最后的字符
(公开成员函数)

data

返回指向字符串首字符的指针
(公开成员函数)

c_str

返回字符串的不可修改的 C 字符数组版本
(公开成员函数)

operator basic_string_view

(C++17)

返回到整个字符串的不可修改的 basic_string_view
(公开成员函数)

int main()
{
	string str = "zytzytzythello";
	//.length
	int n = str.length();//可以获取字符串的长度
	for (int i = 0; i < n; i++)
	{
		cout << str[i] << " ";//不会判断是否越界
	}
	cout << endl;
	//.at访问指定字符,有边界检查
	for (int i = 0; i < n; i++)
	{
		cout << str.at(i) << " ";//会判断是否越界
	}
	cout << endl;
	//.c_str 访回字符串的不可修改的c字符数组版本,具有常性,不能改变字符串的内容
	const char* p = str.c_str();
	cout << p << endl;
	//.data访回指向字符串首字符的指针,不具有常性,可以改变字符串的内容
	char* cp = str.data();
	cout << cp << endl;
	//string 字符串底层还是一个数组,算个容器,也可以使用auto,基于范围的for的遍历打印
	for (auto& x : str)
	{
		cout << x << " ";
	}
	cout << endl;
	//也可以逆向打印
	for (int i = str.size()-1; i >=0; --i)
	{
		cout << str[i] << " ";
	}
	cout << endl;
	//.front访问首字符
	cout << str.front() << endl;
	//.back访问最后一个字符
	cout << str.back() << endl;



	return 0;
}

容量:

empty

检查字符串是否为空
(公开成员函数)

sizelength

返回字符数
(公开成员函数)

max_size

返回字符数的最大值
(公开成员函数)

reserve

保留存储
(公开成员函数)

capacity

返回当前对象分配的存储空间能保存的字符数量
(公开成员函数)

shrink_to_fit

(C++11)

通过释放不使用内存减少内存使用
(公开成员函数)
int main()
{
	/*string 字符串刚开始开辟16字节大小的空间,后面还有个\0,
	实际存储空间15个,当空间满了之后,又需要重新开辟空间,
	再将原有空间的数据转移到新的空间,再释放原有的空间,
	如果一直在添加字符串,这样效率就比较低*/
	//.reserve 保留存储,刚开始直接开辟想要的空间大小
	string str;
	str.reserve(8000);//直接将空间开辟到8000字节

	return 0;
}

string 的空间大小如何增长

//空间增量
int main()
{
	string str;
	for (int i = 0; i < 300; ++i)
	{
		//str.size()打印当前字符串大小,str.capacity()打印当前字符串开辟的空间大小
		cout << str.size() << " " << str.capacity() << " ";
		//字符串开辟的空间使用‘a’填充
		str.push_back('a');
	}
	cout << str << endl;
	return 0;

刚开始按1倍增长,后面按1.5增长

int main()
{
	string str;
	str.reserve(400);//刚开始就申请400个字节
	cout << str.capacity() << endl;
	return 0;
}

我们可以看出,刚开始直接申请400字节的空间,实际系统开辟的空间大于申请的空间。

操作:

clear

清除内容
(公开成员函数)

insert

插入字符
(公开成员函数)

erase

移除字符
(公开成员函数)

push_back

后附字符到结尾
(公开成员函数)

pop_back

(C++11)

移除末尾字符
(公开成员函数)

append

后附字符到结尾
(公开成员函数)

operator+=

后附字符到结尾
(公开成员函数)

compare

比较二个字符串
(公开成员函数)

starts_with

(C++20)

检查 string 是否始于给定前缀
(公开成员函数)

ends_with

(C++20)

检查 string 是否终于给定后缀
(公开成员函数)

contains

(C++23)

检查字符串是否含有给定的子串或字符
(公开成员函数)

replace

替换字符串的指定部分
(公开成员函数)

substr

返回子串
(公开成员函数)

copy

复制字符
(公开成员函数)

resize

更改存储的字符数
(公开成员函数)

resize_and_overwrite

(C++23)

更改存储的字符数并可能经由用户提供的操作重写不确定的内容
(公开成员函数)

swap

交换内容
(公开成员函数)
int main()
{
	string str;
	char ch;
	//.push_back字符串结尾添加字符
	while (cin.get(ch), ch != '\n')
	{
		str.push_back(ch);
	}
	cout << str << endl;
	//向字符串中输入字符串
	string stra;
	string tmp;
	while (cin >> tmp, tmp != "end")
	{
		str += tmp + ' ';//字符串之间可以直接用+连接
	}
	cout << str << endl;

	//.clear 清除字符串
	str.clear();
	cout << str << endl;

	return 0;
}

迭代器

迭代器

begincbegin

(C++11)

返回指向起始的迭代器
(公开成员函数)

endcend

(C++11)

返回指向末尾的迭代器
(公开成员函数)

rbegincrbegin

(C++11)

返回指向起始的逆向迭代器
(公开成员函数)

rendcrend

(C++11)

返回指向末尾的逆向迭代器
(公开成员函数)
int main()
{
	string str = "zytzytzythello";
	//iterator 正向迭代器 .begin 正向访问
	string::iterator ip = str.begin();
	for (; ip != str.end(); ++ip)
	{
		cout << *ip << " ";
	}
	cout << endl;
	//reverse_iterator 逆向迭代器 .begin 逆向访问
	string::reverse_iterator cp = str.rbegin();
	for (; cp != str.rend(); ++cp)
	{
		cout << *cp << " ";
	}
	cout << endl;
	



	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值