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++知识库 -> c++_STL_string类简介 -> 正文阅读

[C++知识库]c++_STL_string类简介

STL:STL是c++中的标准模板库,在其中有很多大佬封装的模板类,帮助我们的代码,使c++的编程更加方便。
下面介绍string类的一些常见用法:

1、string的构造函数

string(); // string 的默认构造函数
string(const char*s);// 使用c风格的字符串来构造一个string对象
string(size_t n,char c);//使用n个字符c来构造一个string对象
string(const string&s);// 使用另一个string对象构造string对象

使用举例:

string s1;//默认构造
cout << "s1 = "<< s1 << endl;//打印空串

char *s = "hello world!";
string s2(s);//使用字符串s来构造s2
cout << "s2 = " << s2 << endl;

string s3(5, 'c');//使用5个字符c来构造s3
cout << "s3 = " << s3 << endl;

string s4 = s2;//使用s2来拷贝构造s4
cout << "s4 = " << s4 << endl;

结果展示:
在这里插入图片描述

2.string常用的容量操作

size_t size();//返回string中的有效字符数
size_t lenth();//返回string中的有效字符数
size_t capacity();//返回string中的空间大小
bool empty();//检测string中是否为空串,是则返回true,否则返回false
void clear();//清空有效字符
void reserve(size_t n=0);//为字符串预留空间
void resize(size_t n,char c);//将字符串的有效字符数改为n,多出的空间用字符c填充
void resize(size_t n,char c);//将字符串的有效字符数改为n,多出的空间用字符'\0'填充

使用举例:

	//初始化string对象
	string s1 = "abcdefg";
	
	//输出s1的size,length,capacity的信息
	cout << "size = " << s1.size() << endl;
	cout << "length = " << s1.length() << endl;
	cout << "capacity = " << s1.capacity() << endl;

	//判断s1是否为空
	if (s1.empty())
		cout << "it is empty!" << endl;
	else
		cout << "it is not empty!" << endl;
	
	//为s1预留20个字节的有效字符空间
	s1.reserve(20);
	cout << "capacity = " << s1.capacity() << endl;
	
	//将s1的有效字符大小改为5,和10,并用'c'填充
	s1.resize(5);
	cout << "size = " << s1.size() << endl;
	s1.resize(10, 'c');
	cout << s1 << endl;

	//清空字符串
	s1.clear();
	cout << "size = " << s1.size() << endl;

结果展示:
在这里插入图片描述

3.string对象的访问及常用的遍历操作

char& operator[](int i);//对于方括号的重载
begin() + end();//begin获取第一个元素的迭代器,end获取最后一个字符的下一个位置的迭代器
rbegin() + rend();//rbegin获取最后一个字符的下一个位置的迭代器,rend获取第一个元素的迭代器

使用举例:

	//初始化s1
	string s1 = "abcdefg";

	//使用传统的c风格的代码也可以遍历string对象
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1[i];//这里使用的是重载过的[]运算符
	}
	cout << endl;
	
	//定义一个string对象的迭代器 it,指向s1的第一个字符
	string::iterator it = s1.begin();
	//当it不指向s1的最后一个字符的下一个位置,就输出it的内容,然后it++
	while (it != s1.end())
	{
		cout << *it;
		it++;
	}
	cout << endl;

	//定义一个string对象的反向迭代器 rit,指向s1的最后一个字符的下一个位置
	string::reverse_iterator rit = s1.rbegin();
	//当it不指向s1的第一个字符,就输出it的内容,然后it++(此时加加,意味着反向迭代器往前移动)
	while (rit != s1.rend())
	{
		cout << *rit;
		rit++;
	}
	cout << endl;

结果展示:
在这里插入图片描述

4.string类的对象修改操作

void push_back(char c);//在字符串尾插入一个字符c
void append(const char* s);//在字符串尾插入一个字符串s
string& operator+=(char *s);//在字符串尾追加一个字符串s
const char* c_str()const;//返回c风格的字符串
size_t find(char c,size_t pos = 0)const;//从位置pos开始,寻找字符'c',找到则返回位置,否则返回npos
size_t rfind(char c,size_t pos = npos)const;//从位置pos开始,反向寻找字符'c',找到则返回位置,否则返回npos

使用举例:

	//初始化s1
	string s1 = "abc";
	
	//向s1的尾部插入'd','e','f'
	s1.push_back('d');
	s1.push_back('e');
	s1.push_back('f');
	cout << "s1 = " << s1 << endl;

	//向s1的尾部插入"ghijk"
	s1.append("ghijk");
	cout << "s1 = " << s1 << endl;

	//向s1的尾部插入"lmn"
	s1 += "lmn";
	cout << "s1 = " << s1 << endl;

	//使用c风格的字符串接收s1中的字符串
	const char* cstr = s1.c_str();
	for (int i = 0; i < strlen(cstr); i++)
		cout << cstr[i];
	cout << endl;

	//向s1的最后插入'c',分别从前往后寻找'c',从后往前寻找'c'
	s1.push_back('c');
	cout << "first-pos = " << s1.find('c') << endl;
	cout << "last-pos = " << s1.rfind('c') << endl;

结果展示:
在这里插入图片描述

5.string类的非成员函数

string operator+(const string& lhs, const string& rhs);//将lhs和rhs中的字符串进行拼接
istream& operator>>(istream& is,string& str);//从标准输入给str赋值
ostream& operator<<(ostream& os,string& str);//将str中的字符串给标准输出
istream& getline(istream& is,string& str);//获取一行数据给str赋值
bool operator==(const string& lhs,const string& rhs);//判断lhs是否与rhs相等(string中有很多关系比较符的重载,这里只介绍==,其他的用法大致相同)
……

使用举例:

	//初始化s1,s2
	string s1 = "abc";
	string s2 = "def";

	//s3用s1+s2的结果初始化
	string s3 = s1 + s2;
	cout << "s3 = " << s3 << endl;

	//从标准输入给s1赋值
	cin >> s1;
	cout << "s1 = " << s1 << endl;

	//接收回车键
	getchar();

	//获取一行的输入,给s2赋值
	getline(cin, s2);
	cout << "s2 = " << s2 << endl;

	//判断s1与s2是否相等
	if (s1 == s2)
		cout << "s1 = s2" << endl;
	else
		cout << "s1 != s2" << endl;

结果展示:
在这里插入图片描述

结语:

注意,string中有很多的内部方法,这里只介绍了其中常用的部分,而且,其中很多方法都有它的重载函数,这里只介绍了其中一种,剩下的方法可以自行查阅,用法大致相同。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:56:57 
 
开发: 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年11日历 -2024/11/24 8:58:58-

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