C++第十六弹---string使用(上)

这篇具有很好参考价值的文章主要介绍了C++第十六弹---string使用(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++第十六弹---string使用(上),c++,开发语言,c语言,算法

个人主页: 熬夜学编程的小林

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】

目录

1、标准库中的string类

   1.1、string类的常用接口说明

1.1.1、string类对象的常见构造

1.1.2、string类对象的容量操作 

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

总结


根据前面一弹我们知道string实质是一个类,既然讲述的是类,那必然我们需要从构造函数开始说起,以下文正文内容。

1、标准库中的string类

注意:因为标准库中的string类接口函数较多,高达100多个,所以博主只对一些比较常见的接口函数进行使用和模拟,如果想要全部使用的话可以看前面一弹博主推荐的网站进行查询。

   1.1、string类的常用接口说明

      1.1.1、string类对象的常见构造

C++第十六弹---string使用(上),c++,开发语言,c语言,算法

1、string(); // 无参构造,构造空string类,只有\0。
2、string(const string & str);// 拷贝构造 将string类str拷贝到类中。
3、string(const string & str, size_t pos, size_t len = npos);

static const size_type npos = -1;
拷贝构造 将string类str从pos位置拷贝len个长度到类中,默认长度为npos,npos为-1,
但是类型为无符号整数类型,因此npos为无符号整数最大值,库规定len大于字符串长度,则拷贝整个str则结束。

4、string(const char* s);// 将字符串s拷贝到类中
5、string(const char* s, size_t n);// 将字符串的前n个拷贝到类中
6、string(size_t n, char c);// 拷贝n个字符c到类中

int main()
{
	string s1;//无参构造 只有\0
	string s2("hello world");//将括号内字符串拷贝给s2
	string s3("hello world", 0, 2);//将括号内的字符串从第0个位置拷贝2个元素给s3
	string s4(s2);//拷贝构造 将s2类拷贝给s4
	string s5(s2, 5);//拷贝构造 将s2类的前5个字符拷贝给s5
	string s6(10, 'a');//拷贝n个字符a给s6

	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << s5 << endl;
	cout << s6 << endl;
	return 0;
}

C++第十六弹---string使用(上),c++,开发语言,c语言,算法

1.1.2、string类对象的容量操作 

1、size_t size() const;//获取字符串有效字符长度
2、size_t length() const;//获取字符串有效字符长度
3、size_t capacity() const;//获取字符串容量
4、bool empty() const;//检测字符串释放为空串,是返回true,否则返回false
5、void clear();//清空有效字符
6、void reserve(size_t n = 0);//为字符串预留空间
7、void resize(size_t n);//将有效字符的个数该成n个,即扩容
8、void resize(size_t n, char c);//将有效字符的个数该成n个,多出的空间用字符c填充

int main()
{
	string s1("hello world");
	cout << s1.size() << endl;//计算s1的有效数据个数
	cout << s1.length() << endl;//计算s1的有效数据个数
	cout << s1.capacity() << endl;//计算s1的容量
	cout << s1.empty() << endl;//判断s1是否为空串
	s1.clear();//清空字符串数据
	s1.reserve(50);//扩大容量至50字节
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	s1.resize(30);//扩大有效数据至30,大于原来的大小则用\0填充
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	s1.resize(30, 'a');//扩大有效数据至30,大于原来的大小则用字符a填充
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
    return 0;
}

C++第十六弹---string使用(上),c++,开发语言,c语言,算法

注意:

1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一 致,一般情况下基本都是用size()。

2. clear()只是将string中有效字符清空,不改变底层空间大小。

3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大 小,如果是将元素个数减少,底层空间总大小不变。

4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于 string的底层空间总大小时,reserver不会改变容量大小。 

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

    1、 char& operator[] (size_t pos);//访问pos位置的值,可以修改值
    2、 const char& operator[] (size_t pos) const;//同上,唯一区别是不能修改值
    3、 char& at (size_t pos);//通过函数方式访问pos位置的值,可以修改值
    4、 const char& at (size_t pos) const;//同上,唯一区别是不能修改值
    5、 char& back();//访问字符串最后一个字符,可以修改值
    6、 const char& back() const;//同上,唯一区别是不能修改值
    7、 char& front();//访问字符串第一个字符,可以修改值
    8、 const char& front() const;//同上,唯一区别是不能修改值
    9、 iterator begin();//指向字符串首元素的迭代器(暂时可以理解为指针),可以修改值
    10、const_iterator begin() const;//同上,唯一区别是不能修改值
    11、iterator end();//指向字符串最后一个元素的下一个位置迭代器(暂时可以理解为指针),可以修改值
    12、const_iterator end() const;//同上,唯一区别是不能修改值
    13、范围for 底层为迭代器

注意:迭代器还有rbegin,rend,cbegin,cend等,这些不怎么常用,可以自己查文档了解。

int main()
{
	string s("hello world");
	cout << s[1] << endl;//打印下标为1的字符
	s[1]++;
	cout << s[1] << endl;//打印下标为1的字符
	cout << s.at(2) << endl;//打印下标为2的字符
	cout << s.front() << endl;//打印字符串首字符
	cout << s.back() << endl;//打印字符串尾字符
	//1、下标访问字符串
	for (int 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 ch : s)
	{
		cout << ch << " ";
	}
	cout << endl;
	return 0;
}

C++第十六弹---string使用(上),c++,开发语言,c语言,算法

总结


本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!文章来源地址https://www.toymoban.com/news/detail-848604.html

到了这里,关于C++第十六弹---string使用(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ Primer第五版_第十六章习题答案(51~60)

    练习16.51 调用本节中的每个 foo,确定 sizeof…(Args) 和 sizeof…(rest)分别返回什么。 练习16.52 编写一个程序验证上一题的答案。 练习16.53 编写你自己版本的 print 函数,并打印一个、两个及五个实参来测试它,要打印的每个实参都应有不同的

    2024年02月05日
    浏览(26)
  • 算法通关村第十六关——滑动窗口与堆结合

    LeetCode239给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位,返回滑动窗口中的最大值。 优先队列中每个值存储的是一个包含元素值和对应索引的数组 [元素值, 索引] 。在

    2024年02月11日
    浏览(34)
  • C++第十五弹---string基本介绍(一)

     ✨ 个人主页:  熬夜学编程的小林 💗 系列专栏:  【C语言详解】   【数据结构详解】 【C++详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串 7.2、两个面试题 8、标准库中的stri

    2024年04月13日
    浏览(23)
  • 算法通关村第十六关:青铜挑战-滑动窗口其实很简单

    1. 滑动窗口基本思想 数组引入双指针的背景: 很多算法会大量移动数组中的元素,频繁移动元素会导致执行效率低下或者超时,使用两个变量能比较好的解决很多相关问题 数组双指针,之前介绍过 对撞型 和 快慢型 两种,滑动窗口思想就是快慢型的特例 滑动窗口 示例:

    2024年02月09日
    浏览(34)
  • Qt第十六章:QWidget与QML混合开发

    目录 一、Qml作为窗口引入 二、Qml作为控件引入(Qml根组件不能是window) 三、两个问题①Qml文件如何调用python函数②python代码如何控制Qml元素。 一、Qml作为窗口引入 例:QWidget窗口中用按钮 打开和关闭Qml窗口 ①QWidget窗口 ②Qml窗口 注意:此处是直接引入qml文件。如果是从q

    2024年02月16日
    浏览(32)
  • 算法通关村第十六关:黄金挑战:滑动窗口与堆结合

    堆的大小一般是有限的,能直接返回当前位置下的最大值或者最小值 该特征与滑动窗口结合,可以解决一些特定场景的问题 1. 滑动窗口与堆问题的结合 LeetCode239 https://leetcode.cn/problems/sliding-window-maximum/ 思路分析 对于最大值,K个最大这种场景,优先队列(堆)是首先该考虑的

    2024年02月09日
    浏览(30)
  • 第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

    string是C++风格的字符串,而string本质上是一个类 string和char 区别 1、char 是一个指针 2、string是一个类,类内部封装了char*,管理这个字符串,是一个char 型的容器。 特点: string类内部封装了很多成员方法 例如:查找find,拷贝copy,删除delete替换replace,插入insert string管理char

    2024年02月15日
    浏览(37)
  • 第十六章 使用MariaDB数据库管理系统

    一、数据库管理系统 1、数据库介绍 数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代,互联网上每天都会生成海量的数据信息,数据库技术也从最初只能存储简单的表格数据的单一集中存储模式,发展到了现如今存储海量数据

    2024年02月05日
    浏览(42)
  • MFC第十六天 CFileDialog、CEdit简介、(线程)进程的启动,以及Notepad的开发(托盘技术-->菜单功能)

    通用对话框 CCommonDialog 这些对话框类封装 Windows 公共对话框。 它们提供了易于使用的复杂对话框实现。 CFileDialog 提供用于打开或保存文件的标准对话框。 CColorDialog 提供用于选择颜色的标准对话框。 CFontDialog 提供用于选择字体的标准对话框。 CFindReplaceDialog 为搜索和替换操作

    2024年02月16日
    浏览(28)
  • Java开发面试题目场景业务提问第十六章:常问日常必备_JAVA_面试题集(含答案)【王大师】

    往期文章   第 十 章 日常_JAVA_面试题集10(含答案)  第十三章:日常_JAVA_面试题集13(含答案)  第十二章:日常_JAVA_面试题集12(含答案)  第十一章:日常_JAVA_面试题集11(含答案)  往期文章大全……

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包