C++string类讲解

news2024/9/24 18:05:25

大家好鸭

见字如面,已经有好久没有写文章了,这段时间忙着学习,也忙着玩,所以停更了一段时间

今天让我们来谈一谈关于C++中的string类

什么是string类?

在c语言中我们操作字符串往往采用指针,这样的访问方式并不安全,有可能会导致越界,使用起来并不方便,string类封装了字符串的操作

为什么我们需要string类?

c语言中的字符串操作不符合OOP思想,使用string类可以使各种库函数方便访问,string类的出现使字符串操作方便快捷

string类接口

string类构造函数

string的构造函数有7种,但常有的有4种

string();//默认初始化
	string(const char* s);//使用字符串初始化
	string(size_t n, char c);//使用n个字符c初始化
	string(const string & s);//使用另一个string类去初始化

string对象的容器操作

size函数和length函数一样都是返回string中的字符个数,不包括\0

string mystring;
mystring.size();

使用时在string变量后面跟上.siez()  调用函数

max_size函数返回string可以存放的最大字符个数,但没什么用,存放个数与存储空间有关,返回的值并不能表示最大存储个数

resize函数有两种使用方式

resize(size_t n)//将有效字符个数变为n个,如果n小于当前有效字符个数则在n+1位置放置一个\0
//若n大于当前有效字符个数则使用\0填充到n个有效字符
resize(size_t n,char c)//和上面一样,但填充时采用char c填充

capacity函数,查看当前可容纳的字符个数

reverse函数,开空间的函数,可以将空间开到n个,当知道string大概有几个字符时可以使用这个提前开好空间

clear函数,清除当前的所有字符串,但容量不变

empty函数,查看string是否为空,空返回true,非空返回false

string类的访问

本文介绍string类的各种常见的访问方式

string类中重载了operator[]

这string类可以直接像数组一样访问,括号中的数字为下标

    string add("abcdef");
	for (int i = 0; i < add.size(); i++)
	{
		cout << add[i] << endl;
	}

这是一种遍历数组的方式

另外stirng类还有对应的迭代器,可以通过迭代器遍历string类

string add("abcdef");
	auto it = add.begin();
	while (it != add.end())
	{
		cout << *it << endl;
		++it;
	}

这两者最后遍历的效果是一样的

为了方便头和尾的访问stirng引入了back和front

    string add("abcdef");
	add.back() = 'x';
	add.front() = 'x';
	cout << add << endl;

效果如下

back和front是直接指向最后一个字符和第一个字符

string类的修改操作

第一个push_back

用于在尾部再增加一个字符

第二个operator+=

用于在尾部增加字符串或单个字符

这个使用比push_back方便,可以代替使用

第三个append

这个用于在尾部增加字符串,也可以被+=代替

第四个assign

这个函数是对string类进行重新赋值,具体的接口有很多,

string& assign (InputIterator first, InputIterator last)

这个写题的时候用的多

第五个insert和erase

insert函数可以在指定位置插入字符串,字符,n个字符

也支持在迭代器位置插入n个字符,或一个字符,或一段迭代器区间

erase函数在指定位置删除长度为npos的字符串

也可以单独删除一个迭代器位置

或删除一段迭代器区间

其他string函数

c_str函数

返回c语言形式的字符串,用于和一些函数对接,因为存在一些函数检查的是c语言类型的字符串

find函数

在指定位置查找字符串或者字符

substr函数

在指定位置截取长度为n的字符串,并返回

getline函数

这个函数可以在输入的时候避免空格中断输入

string的各种常用函数就介绍到这里,如有错误还请不吝赐教,谢谢大家

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不看后悔的腾讯云优惠券领取入口指南,2024最新代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

二级医院云HIS系统,云HIS源码,支持分院HIS,集团HIS

云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信息系统&#xff0c;实现数字化医院信息系统的转型升级。云 HIS 系统功能完善&#xff0c;涵盖临床各业务部门&#xff0c;采集、抽提、汇总、存贮、展现所有的临床诊…

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作&#xff0c;一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过&#xff0c;到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

[物联网] OneNet 多协议TCP透传

[物联网] OneNet 多协议TCP透传 STM32物联网–ONENET云平台的多协议接入产品创建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透传 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服务端测试工具 : http://tcp.xnkiot.com/…

解决导入项目后在idea中不显示的问题

问题&#xff1a; 今天下午重新打开寒假之前负责的项目&#xff0c;发现打不开了&#xff0c; 从master拉取最新代码到我的分支&#xff0c;发现我的分支上显示就是这样子&#xff0c;无论怎么更新代码都不行。 原因&#xff1a; 在上一次上传代码的时候&#xff0c;我把我分…

YOLOv9改进|使用AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

JAVA的学习日记

JAVA的学习日记&#xff08;2024.3.1&#xff09;&#xff08;b站韩顺平老师课程学习笔记版&#xff09; ps:捡起忘光光的Java语言 Sublime //1. public是公有&#xff0c;class是类 //2. public class Hello表示Hello是一个类&#xff0c;是一个public公有的类 //3. Hello{…

【框架】MyBatis 框架重点解析

MyBatis 框架重点解析 1. MyBatis 执行流程 会话工厂生产的 SqlSession 对象提供了对数据库执行SQL命令所需的所有方法&#xff0c;包括但不限于以下功能&#xff1a; 数据库操作&#xff1a;SqlSession可以执行查询&#xff08;select&#xff09;、插入&#xff08;insert&a…

桥接模式(Bridge Pattern) C++

上一节&#xff1a;适配器模式&#xff08;Adapter Pattern&#xff09; C 文章目录 0.理论1.组件2.使用场景 1.实践 0.理论 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与其实现部分分离&#xff0c;使它们可…

liunx安装jdk、redis、nginx

jdk安装 下载jdk,解压。 sudo tar -zxvf /usr/local/jdk-8u321-linux-x64.tar.gz -C /usr/local/ 在/etc/profile文件中的&#xff0c;我们只需要编辑一下&#xff0c;在文件的最后加上java变量的有关配置&#xff08;其他内容不要动&#xff09;。 export JAVA_HOME/usr/l…

操作系统系列学习——多进程图像

文章目录 前言多进程图像 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈工大】…

设置文字之间的间距应该如何实现

设置文字之间的间距&#xff0c;通常指的是字母之间&#xff08;字符间距&#xff09;或单词之间的间距。在CSS中&#xff0c;这可以通过letter-spacing和word-spacing属性来实现。 字符间距&#xff08;letter-spacing&#xff09; letter-spacing属性用于调整字符之间的间距…

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…

C++:设计包含min 函数的栈

目录 题目 代码实现 输出 题目 定义栈的数据结构&#xff0c;要求添加一个min 函数&#xff0c;能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。 代码实现 #include <iostream>template<typename T>class stack { public:stack() {…

React富文本编辑器开发(四)

上一节我们做了块级元素的格式操作&#xff0c;这节我们来讲行内元素的相关操作。行内元素的样式一般指 粗体、斜体、代码或 删除线等 。通过前一章的内容得知&#xff0c;元素的渲染是通过渲染器来呈现的&#xff0c;块级元素通过指定 renderElement, 行内元素&#xff08;即内…

vxe-table编辑单元格动态插槽slot的使用

业务场景&#xff1a;表格中只有特定某一行的的单元格可以编辑&#xff0c;列很多&#xff0c;为每个列写个插槽要写很多重复代码&#xff0c;所以这里使用动态插槽&#xff0c;简化代码量。显示编辑图标&#xff0c;点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…

【C语言】文件及文件操作详解(fseek,ftell,rwind)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 二进制文件和文本文件 4. 文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 文件的打开和关闭 5. 文件的顺序读写 6.文件的随机读写 6.1 fseek 6.2 ft…

解决Keepalived “脑裂”(双VIP)问题

1. 检查广播情况 yum install tcpdump -y tcpdump -i ens33 vrrp -n master 192.168.80.130 与 backup: 192.168.80.131都在广播&#xff0c;正常情况下backup应该是不在广播的&#xff0c;所以可以判断存在防火墙屏蔽vrrp问题&#xff0c;需要设置VRRP过掉防火墙&#xff0…

浏览器常见问题及技巧总结-------( 更新中 )

浏览器常见问题及技巧总结 浏览器1 查找网页关键字2 如何利用技术下载网上图片3 百度搜索技巧 待续、更新中 浏览器 1 查找网页关键字 火狐firefox Ctrlf: 在网页中查找关键字2 如何利用技术下载网上图片 插件: 图片助手(但还是有水印, 比起原版的要差些)3 百度搜索技巧 1.…

SpringCloud gateway限流无效,redis版本低的问题

在使用springCloud gateway的限流功能的时候&#xff0c;配置RedisRateLimiter限流无效&#xff0c;后来发现是Redis版本过低导致的问题&#xff0c;实测 Redis版本为3.0.504时限流无效&#xff0c;改用7.0.x版本的Redis后限流生效。查了资料发现很多人都遇见过这个问题&#x…