C++修炼之路之string--标准库中的string

目录

前言 

一:标准库的string类简介

1.string是basic_string的一份char类型的类模板

2.basic_string类模板的分类 

 3.string是表示字符串的字符串类

4.在使用string类时要添加头文件#include

二:string类的常用接口(只介绍常用的)

1.构造+析构+赋值重载

2.string类对象的容量操作

sting类中的resize和reserve 

注意事项 

3.string类对象的访问及遍历

[]方式访问

普通迭代器方式访问 

const迭代器方式访问const对象

4.string类对象的修改操作 

追加字符或字符串

查找+替换 +截取

 c_str()返回c形式字符串,遇到'\0'就停下来

5.string类非成员函数

getline是用来读取有空格的一串字符串

使用形式如 string s;   getline(cin,s);

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言 

在日常中我们常常会使用字符串来表示一些数据,而在C语言中,字符串是以'\0'结尾的字符的集合,关于字符串的操作在c语言中有着各种str系列的库函数来处理字符串,但有时会因为误用而造成错误,且库函数多不易记住各库函数的的具体操作,因此在c++中提出了string类来解决各种字符串操作

一:标准库的string类简介

1.string是basic_string的一份char类型的类模板

2.basic_string类模板的分类 

发展出不同的类模板 是为了适应各种不同的环境下的使用,比如要兼容各国的语言,字符串表示各国的语言等,就如编码一样,发展了各种的编码来适应各国的语言

最初的ASCII码

我们知道计算机只能识别机器语言,也就是二进制的,对于要在计算机中存储和表示英文就得有对应的转换,这就用到了ASCII码表将其对应的十进制数字表示为二进制的,存储在计算机中

为了兼容各国的语言与文字,便提出了万国码,将各国文字按照对应的转换数字用二进制存储在计算机中

 常用的为UTF-8来转换各国文字

在国内为了更好的兼容,标识和存储汉字便提出了对于汉字的编码

 3.string是表示字符串的字符串类

4.在使用string类时要添加头文件#include <string>

二:string类的常用接口(只介绍常用的)

1.构造+析构+赋值重载

 

举例:

 

2.string类对象的容量操作

注:在capacity计算中是不统计'\0'的

使用 

sting类中的resize和reserve 

1.我们需要了解在vs和g++等不同编译器的扩容情况

int main()
{
	//观察扩容情况
	string s;
	size_t sz = s.capacity();
	cout << "making s grow:\n";
	cout << "capacity change:" << sz << endl;
	for (int i = 0; i < 100; i++)
	{
		s.push_back('c');
		if (sz != s.capacity())
		{
			sz = s.capacity();
			cout << "capacity change:" << sz << endl;
		}
	}

	return 0;
}

我们知道每次扩容的代价还是挺大的,要是异地扩容的话 ,还要不断的拷贝数据,释放原空间,代价增加,既然这样的话我们可以在知道需要开多少空间的情况下,使用reserve提前开辟空间,减少扩容,提高效率

int main()
{
	//观察扩容情况
	string s;
    s.reserve(100);//提前扩容
	size_t sz = s.capacity();
	cout << "making s grow:\n";
	cout << "capacity change:" << sz << endl;
	for (int i = 0; i < 100; i++)
	{
		s.push_back('c');
		if (sz != s.capacity())
		{
			sz = s.capacity();
			cout << "capacity change:" << sz << endl;
		}
	}

	return 0;
}

对于 resize

注意事项 

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

2.resize在改变元素个数时,如果增多元素个数,可能会改变底层容量的大小,如果减少元素个数,底层空间总大小不变

3.reserve为string预留空间,不改变有效元素个数,当参数小于底层空间总大小时,reserve不会改变容量大小

3.string类对象的访问及遍历

[]方式访问

 

普通迭代器方式访问 

正向迭代器

简单理解迭代器 就是两个指针如

 

 范围for遍历

string s3("hello world");
for (auto ch : s3)
{
	cout << ch << " ";
}
cout << endl;

反向迭代器

 

 

 

const迭代器方式访问const对象

4.string类对象的修改操作 

 

 

 使用:

追加字符或字符串

查找+替换 +截取

 

对于上面的这个字符串空格替换还可以再优化为 

 

 

 c_str()返回c形式字符串,遇到'\0'就停下来

使用如cout<<s1.c_str()<<endl;   cout<<s1<<endl;后面一个打印字符串的所有内容

5.string类非成员函数

 

以上几个只需了解即可,对于 getline需要注意

getline是用来读取有空格的一串字符串
使用形式如 string s;   getline(cin,s);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/531497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今日arXiv最热大模型论文:Dataverse,针对大模型的开源ETL工具,数据清洗不再难!

引言&#xff1a;大数据时代下的ETL挑战 随着大数据时代的到来&#xff0c;数据处理的规模和复杂性不断增加&#xff0c;尤其是在大语言模型&#xff08;LLMs&#xff09;的开发中&#xff0c;对海量数据的需求呈指数级增长。这种所谓的“规模化法则”表明&#xff0c;LLM的性…

ETLCloud结合kafka的数据集成

一、ETLCloud中实时数据集成的使用 在ETLCloud中数据集成有两种方式&#xff0c;一种是离线数据集成&#xff0c;另一种便是我们今天所要介绍的实时数据集成了&#xff0c;两者的区别从名字便可以得知&#xff0c;前者处理的数据是离线的没有时效性的&#xff0c;后者的数据是…

常见的解析漏洞总结

文件解析漏洞 文件解析漏洞主要由于网站管理员操作不当或者 Web 服务器自身的漏洞&#xff0c;导致一些特殊文件被 IIS、apache、nginx 或其他 Web服务器在某种情况下解释成脚本文件执行。 比如网站管理员配置不当&#xff0c;导致php2、phtml、ascx等等这些文件也被当成脚本文…

【VScode】同时编辑多处

【VScode】同时编辑多处 1. 多光标自定义批量编辑2. 选择多个&#xff0c;同时操作(批量选中局部匹配项)3. 取消选择4. 在不移动光标的情况下滚动屏幕5. 批量选中全局匹配项6.重点6.1 通过上下键选择多行6.2 同时选中所有行的末尾6.3 选中多列另一种方式6.4 通过正则的方式配置…

显示学习4(基于树莓派Pico) -- 游戏

来自&#xff1a;https://github.com/zelacerda/micropython 代码改造了一下&#xff0c;让它可以跑起来。 简单分析一下代码。外层是一个死循环&#xff0c;有一个状态机来对应不同的场景。 def loop():while True:if state 0: splash_screen()elif state 1: game_waiti…

《数学大世界》期刊点评_栏目设置_投稿指南

《数学大世界》期刊点评_栏目设置_投稿指南 《数学大世界》知网 5000字符3版 收录小中高数学 教研类文章 理论&#xff0b;课题实例 23.1-7月版面&#xff1b; 24年3-4月版面也可安排 主管单位&#xff1a;吉林出版集团股份有限公司 主办单位&#xff1a;北方妇女儿童出版…

Python-VBA函数之旅-bytearray函数

目录 1、bytearray函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 bytearray函数在Python中提供了一种可变字节序列的表示方式&#xff0c;这在实际编程中有多种应用场景。常见的应用场…

基于springboot+vue+Mysql的职称评审管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Web 前端性能优化之八:前端性能检测实践

五、前端性能检测实践 1、常用的检测工具 Lighthouse、Chrome开发者工具中与性能检测相关的一些工具面板、页面加载性能分析工具PageSpeed Insights、专业的性能检测工具WEBPAGETEST等 1、Chrome 任务管理器 通过Chrome任务管理器我们可以查看当前Chrome浏览器中&#xff0…

机器学习-08-关联规则和协同过滤

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中关联规则和协同过滤。 参考 机器学习&#xff08;三&#xff09;&#xff1a;Apriori算法&#xff08;算法精讲&#xff09; Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 2…

苍穹外卖---文件上传-阿里OSS

一&#xff1a;开通阿里云对象存储服务oss,创建bucket&#xff0c;获得密钥 二&#xff1a;在程序中集成上传文件功能 1.连接阿里云OSS对象存储服务器 声明一个配置属性的文件用于传入连接的参数 package com.sky.properties;import lombok.Data; import org.springframewo…

three.js跟着教程实现VR效果(四)

参照教程&#xff1a;https://juejin.cn/post/6973865268426571784&#xff08;作者&#xff1a;大帅老猿&#xff09; 1.WebGD3D引擎 用three.js &#xff08;1&#xff09;使用立方体6面图 camera放到 立方体的中间 like “回” 让贴图向内翻转 &#xff08;2&#xff09;使…

每周一算法:树上差分

题目链接 闇の連鎖 题目描述 传说中的暗之连锁被人们称为Dark。 Dark是人类内心的黑暗的产物&#xff0c;古今中外的勇者们都试图打倒它。 经过研究&#xff0c;你发现Dark呈现无向图的结构&#xff0c;图中有 N N N个节点和两类边&#xff0c;一类边被称为主要边&#xf…

用Python编写GUI程序实现WebP文件批量转换为JPEG格式

在Python编程中&#xff0c;经常会遇到需要处理图片格式的情况。最近&#xff0c;我遇到了一个有趣的问题&#xff1a;如何通过编写一个GUI程序来实现将WebP格式的图片批量转换为JPEG格式&#xff1f;在这篇博客中&#xff0c;我将分享我使用Python、wxPython模块和Pillow库实现…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

光伏电站运维管理平台功能分析

光伏电站的建设发展&#xff0c;不仅可以满足人们日益增长的用电需求&#xff0c;同时对于减少能源资源消耗也有着十分重要的作用。但是光伏电站因为区域跨度大&#xff0c;分布广泛等原因在建设发展中导致了人员管理困难、运维工作落实不到等问题&#xff0c;直接影响光伏电站…

【随笔】Git 高级篇 -- 相对引用1 main^(十二)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

python用循环新建多个列表

​在Python编程中&#xff0c;我们经常需要创建多个列表来存储和管理数据。有时候&#xff0c;列表的数量是已知的&#xff0c;我们可以手动逐一创建&#xff1b;但更多时候&#xff0c;列表的数量是动态的&#xff0c;或者我们希望通过某种模式来批量生成列表。这时候&#xf…

对称加密学习

对称加密是一种加密技术&#xff0c;它使用相同的密钥进行数据的加密和解密操作。这种加密方法因其高效性和速度优势&#xff0c;在数据加密领域得到了广泛的应用。 下面是两篇文章&#xff1a; AES加密学习-CSDN博客 加密算法学习-CSDN博客 推荐关注加密专栏&#xff1a; …

HDLbits 刷题 --Exams/m2014 q4g

Implement the following circuit: 实现以下电路 module top_module (input in1,input in2,input in3,output out);assign out (~(in1^in2))^in3; endmodule运行结果&#xff1a; 分析&#xff1a; 同或&#xff1a; out ~(in1 ^ in2); 异或取反 异或&#xff1a; out in1…