IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> String -> 正文阅读

[C++知识库]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;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:12:03  更:2022-05-27 17:12:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 8:14:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码