String

String,第1张

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字节大小的空间,后面还有个//空间增量
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;
,
	实际存储空间15个,当空间满了之后,又需要重新开辟空间,
	再将原有空间的数据转移到新的空间,再释放原有的空间,
	如果一直在添加字符串,这样效率就比较低*/
	//.reserve 保留存储,刚开始直接开辟想要的空间大小
	string str;
	str.reserve(8000);//直接将空间开辟到8000字节

	return 0;
}
string 的空间大小如何增长
int main()
{
	string str;
	str.reserve(400);//刚开始就申请400个字节
	cout << str.capacity() << endl;
	return 0;
}

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

,实际系统开辟的空间大于申请的空间。

我们可以看出,刚开始直接申请400字节的空间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; }

*** 作:

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)

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1296133.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存