首页/新闻资讯/正文详情

手把手教你C++——string(上)

发布时间:2026/11/6 7:45:32 来源:云帆数科 栏目:资讯中心
手把手教你C++——string(上)
1.为什么学习string类文章目录1.为什么学习string类1.3 C语言中的字符串2. 标准库中的string类2.1 string类的了解2.2 string类的常用接口说明2.3 auto和范围for2.3.1 auto关键字2.3.2 范围for1.3 C语言中的字符串C语言中字符串是以‘\0’结尾的一些字符的集合为了方便操作C标准库中提供了一系列str的库函数但是由于这些库函数和字符串是分开的不太符合OOP的思想而且底层空间需要用户自己管理稍不注意可能还会造成越界访问2. 标准库中的string类2.1 string类的了解string类的文档介绍在使用string类时一定要包含头文件#include 和using namespace std2.2 string类的常用接口说明这里就可以看出string的一些优势对比C来说C不需要考虑字符串的大小等因素因为对于C语言来说数据和函数时分开作用的但是对于C来说并不是这样更方便使用stringoperatoroperator[ ]这里两个函数一个是加了const的一个是不加const之所以要写两个的原因是普通字符是可读可写的但是加了const之后就是只能读不能写。如果传过来的是加了const的字符那就必须得用用const修饰的函数写成两个也是让字符能按照自己的情况找到符合的类型这个操作符在C中使用是很方便的使用的场景也是比较多的虽然这些功能看似数组也是可以实现的但是数组有很多功能是无法直接实现的必须要用特定的函数来实现但string就方便很多。而且C语言的数组对于越界问题检查能力是比较弱的但是像string一旦越界就会报错可以让我们及时的修正错误当然也可以实现遍历并且更改原数据的作用诸如此类的还有max_size、capacity等length的用处跟size其实是一样的而且是比size要早的之所以后来又有size是为了适配一些length形容起来不太适配的场景。之所以留下length是因为要向前兼容小试牛刀那我们现在就来做几道题目看看仅仅反转字母这道反转字符的题目首先就是判断该字符到底是不是字母如果是则前后发生反转如果不是那就跳过再继续判断找字符串中第一个只出现一次的字符这道题的核心在于先统计每个字母出现的次数然后再判断该字母是不是只出现了一遍如果是则返回其下标如果不是则返回-1遍历的方式不止for循环一种用迭代器也是可以遍历的这里之所以有const和非const两个版本的原因是加了const时就是可读不可写数值是不能被改变的不加const时可读也可写数值是可以更改的也可以从后往前遍历其实迭代器的使用面远不止于此像我们之前做过的反转字符的题目等这些都可以用迭代器更加高效的完成因为迭代器对于各种类型都是支持的而且会支持运算符重载中的等为什么明明有了for循环还要用迭代器遍历呢其实迭代器才是主流的用法而且适用于各种类型的遍历比如说链表、二叉树这些是for循环无法完成遍历的但是迭代器可以像上代码中其实it并不是简单的而是运算符重载其实是operator;这样就会按照不同的类型来完成遍历从而适用于各种类型还有一种更加简洁的遍历方式就是auto遍历其底层还是依靠迭代器。再来看这一组push_back为插入一个字符appendoperatorinserterasereplaceswappop_back在一部分我们就来看一下reserve和resize的区别,二者相同之处是都是用来预留空间的这样会比扩容效率更加高一点当然也有不同之处reservereserve只对空间预留但是对于空间是否过剩时要缩减这种问题并没有给出详细的答案但是resize给出了定义resize那我们再来看道题目验证一个字符串是否是回文字符串相加我们知道头插损耗是比较大的那我们就可以换一种方式让效率更高2.3 auto和范围for2.3.1 auto关键字在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量后来这个不重要了。在C11中标准委员会变废为宝赋予了auto新的含义即auto不再是一个存储类型的指示符而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得。用auto声明指针类型时用auto和auto*是没有任何区别的单用auto声明引用类型是必须要加当在一行声明多个变量时这些变量必须是统一类型否则编译器就会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。auto不能作为函数的参数可以做返回值但是也建议谨慎使用(这里是C11时不能够作为参数在后面的版本中就可以)auto做返回值谨慎使用的原因是如果用auto来做返回值如果不写注释别人看你的代码可能就不知道你返回的到底是什么auto不能直接用来声明数组2.3.2 范围for对于一个有范围的集合而言由程序员来说明程序员的范围是多余的有时候还会容易犯错误。因此C111中引入了基于范围的for循环。for循环后的括号由冒号“:”分为两部分第一部分是范围内用于迭代的变量第二部分则表示被迭代的范围自动迭代自动取数据自动判断结束。范围for可以作用到数组和容器对象上进行遍历范围for的底层很简单容器遍历实际就是替换为迭代器这个从汇编层也可以看到在C中遍历数组(只要版本在C11以上)也是支持用auto来遍历的

相关推荐

提示词修炼手册-10-从聊天到委派
提示词修炼手册-10-从聊天到委派

从聊天到委派:Agent时代的提示词思维转变《提示词修炼手册:从会问到会用》第10篇 | 系列共14篇 🔧 进阶篇:本篇面向使用Agent/自动化工具的读者,日常简单问答可跳过。摘要 使用AI Agent时,提示词思维需要从… · 2026/11/6 7:45:32

AI 应用被高并发打挂怎么办?七道稳定性硬核题深度解析
AI 应用被高并发打挂怎么办?七道稳定性硬核题深度解析

✍️ 作者:王文峰(外号:神秘小峯 / 山峯)|中国国学、传统文化与代码爱好者的程序人生,期待你的关注和支持! AI 应用七道硬核题(二):缓存、限流、路由与降级 一、七题全景:AI 应用的稳定性拼图 二、硬核题 1:长上下文工程——窗口很大,但不是免费的 1. 原理:三个被… · 2026/11/6 7:45:32

前端没死,但只会前端会被淘汰?收藏!小白程序员必看大模型转型指南!
前端没死,但只会前端会被淘汰?收藏!小白程序员必看大模型转型指南!

文章指出前端岗位因AI技术发展而缩减,建议前端程序员学习AI应用开发,通过做完整项目提升技能,转型AI应用开发。文章强调,市场需要懂业务、懂后端、懂AI的复合型人才,并提供三个月的转型计划,建议程序员不要… · 2026/11/6 7:45:32

英国水电工证过期了不知道怎么复审延期?考前押题帮你稳过
英国水电工证过期了不知道怎么复审延期?考前押题帮你稳过

英国水电工证过期了不知道怎么复审延期?考前押题帮你稳过 证书过期了不知道怎么复审延期,你不是一个人。很多持证人一忙就忘了复审时间,等想起来已经错过了有效期,甚至被单位或客户投诉。别慌,这篇文章就来帮你理清英国水电工证的复审流程,顺便分享… · 2026/11/6 19:42:08

南通启东考电工证时间现在考还来得及吗?学历不高也能报!
南通启东考电工证时间现在考还来得及吗?学历不高也能报!

南通启东考电工证时间现在考还来得及吗?学历不高也能报! 你是不是也觉得学历不高,考电工证怕报不上名?别急, 南通启东考电工证时间 已经出来了,而且这个证 全国通用 ,不管你在哪个城市,只要持证上岗,都能合法合规地干电工活儿。… · 2026/11/6 19:42:08

遵义考高压电工证行业前景与薪资待遇
遵义考高压电工证行业前景与薪资待遇

高压电工证报考避坑指南:工地太忙根本没时间复习考试怎么办 工地太忙根本没时间复习考试,这几乎是每个一线电工的共同痛点,尤其是像遵义考高压电工证这种对专业知识和实操能力要求高的证书,备考压力直接拉满。但你知道吗?在郑州金水区的施工现场,很多项… · 2026/11/6 19:42:08

英国水电工证怎么考含金量高不被坑
英国水电工证怎么考含金量高不被坑

英国水电工证怎么考含金量高不被坑 你是不是也遇到过这种情况? 不知道去哪报名怕被中介坑 ,看到网上一堆培训机构,价格五花八门,证书也参差不齐, 含金量… · 2026/11/6 19:42:08

30岁濮阳人考电工证怕考不过白交培训费?昌平区学习电工证与郑州报考避坑指南全解析
30岁濮阳人考电工证怕考不过白交培训费?昌平区学习电工证与郑州报考避坑指南全解析

30岁濮阳人考电工证怕考不过白交培训费?昌平区学习电工证与郑州报考避坑指南全解析 怕考不过白交培训费?别急,我跟你们说句掏心窝子的话,这年头考电工证,不是为了面子,是为了一口饭吃。特别是像我这样从濮阳过来的,想在昌平区找份稳定活儿干,电工证… · 2026/11/6 19:42:08

之前考的证在外省能不能转过来?水电改造需要电工证吗的真实经历
之前考的证在外省能不能转过来?水电改造需要电工证吗的真实经历

之前考的证在外省能不能转过来?水电改造需要电工证吗的真实经历 之前考的证在外省能不能转过来?这是我接到的第一个问题,也是很多在外地工作、准备转行或想从事水电改造的朋友们的普遍疑问。我一个河南的应届毕业生,毕业刚进工地,就被问到“水电改造需要… · 2026/11/6 19:41:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码