C++ 第 20 课:std::string 字符串

发布时间:2026/10/3 14:35:35

C++ 第 20 课:std::string 字符串 上一课标准答案data[0] 10 data[2] 30 data.size() 3data里面依次是5, 10, 15最后q {10, 50, 30}因为data.size()会根据vector当前实际元素数量自动变化如果后续push_back()增加了数据循环仍然能遍历全部元素。固定写6就不够灵活。第 20 课std::string字符串这一课很重要因为真实机器人程序里会大量出现ERROR CONNECTED /dev/ttyUSB0 joint_states base_link camera这些都是字符串。1. 先解决一个你之前埋下的问题我们以前见过char grade A;又见过std::cout Hello std::endl;注意A和A完全不是一回事。最简单记法A → 一个字符 A → 一串字符也就是字符串2.char是一个字符例如char state A;这里只能表示一个字符A例如char c1 R; char c2 1; char c3 ?;都是单个字符。使用 单引号。3. 字符串是很多字符连在一起例如Robot实际上可以想象成R o b o t所以字符串不是一个字符而是一串字符。C 中现代常用写法std::string name Robot;4. 使用std::string要准备什么通常需要#include string完整一点#include iostream #include string然后std::string name Robot;5. 逐部分拆开std::string name Robot;这里std::string表示字符串类型。name是变量名。Robot是具体字符串内容。所以整句创建一个字符串变量name里面保存Robot。6. 为什么又有std::你之前学过std::cout可以先理解成std里面的cout同理std::string就是C 标准库std里面的string所以现在你又看到一个标准库工具。7. 输出字符串例如#include iostream #include string int main() { std::string robot_name JYKER; std::cout robot_name std::endl; return 0; }输出JYKER8. 字符串可以重新赋值例如std::string state Idle; state Running;最后state Running和普通变量一样int a 5; a 10;字符串变量也可以修改。9. 字符串可以比较例如std::string state ERROR; if (state ERROR) { std::cout Stop robot std::endl; }这里state ERROR表示判断字符串内容是否等于ERROR。如果成立就进入if。这在机器人状态判断里很常见。10. 机器人状态例子std::string state CONNECTED; if (state CONNECTED) { std::cout Robot ready std::endl; } else { std::cout Robot not ready std::endl; }因为state CONNECTED所以输出Robot ready11. 字符串可以拼接这是std::string很方便的地方。例如std::string first Joint; std::string second 1; std::string result first second;最后result Joint1这里不再是数字加法而是字符串拼接。12. 再看一个更自然的例子std::string name Joint; std::string state Ready; std::string message name state;最后Joint Ready因为Joint Ready拼在一起。13. 但字符串和数字不能随便直接相加例如std::string name Joint; int id 1;你不能简单认为std::string result name id;就会自动得到Joint1这里会涉及类型转换。以后我们会专门讲std::to_string()现在先不展开。14. 字符串长度和vector类似string也有.size()例如std::string name Robot;那么name.size()得到5因为R o b o t 1 2 3 4 5一共 5 个字符。15. 也可以用.length()例如name.length()也能得到字符串长度。对于std::string.size()和.length()在这里基本可以理解成同样用途。16. 字符串也可以像数组一样访问例如std::string name Robot;那么name[0] R name[1] o name[2] b name[3] o name[4] t注意字符串下标也从 0 开始。所以std::cout name[0] std::endl;输出R17. 为什么name[0]是char因为字符串本质上由一个个字符组成。例如std::string name Robot;可以粗略想成[0] [1] [2] [3] [4] R o b o t所以name[0]得到的是R也就是一个char。18. 一个机器人串口名称例子以后 Linux / ROS / 串口通信里你可能看到std::string port /dev/ttyUSB0;这表示串口设备名称。然后可能传给某个函数openSerial(port);你现在至少已经知道port是一个字符串变量。19. ROS2 里面字符串非常多以后你可能看到std::string topic /joint_states;或者std::string frame base_link;这些都只是字符串数据。所以以后看到 ROS2 那些名字不要觉得神秘。本质上/joint_states base_link camera_link都只是字符串。20. 字符串和char一定区分这个要形成条件反射。一个字符char state A;用A单引号。字符串std::string state ERROR;用ERROR双引号。所以A char A 字符串即使里面都只有一个字母也不是同一种类型。21. 一个完整机器人状态程序#include iostream #include string int main() { std::string robot_state ERROR; if (robot_state ERROR) { std::cout Stop robot std::endl; } else if (robot_state RUNNING) { std::cout Robot running std::endl; } else { std::cout Unknown state std::endl; } return 0; }这里你现在已经能看懂绝大部分。因为robot_state ERROR所以robot_state ERROR成立。最终输出Stop robot22. 一个字符串循环例子std::string name ARM; for (int i 0; i name.size(); i) { std::cout name[i] std::endl; }依次输出A R M这实际上把你之前学的for 数组下标 size() string连接起来了。23. 本课最核心的 5 个写法创建std::string name Robot;比较name Robot拼接a b长度name.size()访问字符name[0]本课小练习第 1 题下面两个分别是什么类型A和A第 2 题std::string name Robot;那么name[0] ? name[2] ? name.size() ?第 3 题std::string state ERROR; if (state ERROR) { std::cout 1 std::endl; } else { std::cout 2 std::endl; }输出什么第 4 题std::string a Joint; std::string b Ready; std::string c a b;最后c是什么下一课我们会进入第 21 课struct这一步会非常适合机器人。因为现在一个关节不只有angle它还可能有angle speed current temperature enabled我们不希望定义一堆散乱变量而会开始把它们打包成struct Joint { double angle; double speed; bool enabled; };这会是你从“写小程序”走向“组织真实机器人数据”的第一步。
延伸阅读

更多相关文章

2026/10/3 14:35:35

CAD视频批注指南:用录屏+批注解决图纸沟通难题

1. 图纸沟通的痛点,其实不是画图,是“说不清” 做CAD这行的人都懂,图纸本身从来不是最大的难题,真正让人头秃的是图纸交付之后的沟通环节。设计院改一版图,施工方看不懂某个节点,甲方对某个细节有疑问&…

2026/10/3 14:35:35

高德地图与Three.js融合:数字农场3D大屏技术实践

刚接这个项目的时候,客户提的需求听上去很简单:把农场的地块、大棚、农机位置放到地图上,周围环境数据能实时看到就行。但真正动手就会发现,传统2D地图上的标记点完全满足不了“数字农场”的展示需求——地块边界要清晰、大棚要有…

2026/10/3 14:35:35

探秘互联网专业领域!这家SEO优化服务商有何过人之处?

痛点深度剖析我们团队在实践中发现,SEO优化领域存在诸多痛点。在流量获取方面,SEO见效慢,很多企业做了半年优化,关键词排名依旧没有变化;SEM烧钱快,谷歌广告点击成本不断攀升,ROI难以转正。同时…

2026/10/3 15:25:37

微信数据库解密与数据导出全流程解析:从SQLCipher到聊天记录备份

简介:一份面向微信个人数据管理与分析场景的安卓项目源码资源,涵盖聊天记录提取、联系人导出、群组信息获取、数据库解密、聊天内容备份与分析等核心功能,适合需要研究微信数据库结构或开发数据管理工具的开发者使用。资源包共63个文件&#…

2026/10/3 15:25:37

水稻病虫害识别系统源码实战:Python机器学习从训练到部署

简介:这份资源是基于Python机器学习的水稻病虫害自动识别系统源码包,面向农学信息化方向的学生、课程设计开发者及希望入门图像分类实战的工程师,用于解决水稻病虫害人工识别效率低、经验依赖强的问题。压缩包共310个文件,约2.56M…

2026/10/3 15:25:37

QuickBlue AI应用底座:企业大模型落地与实战指南

1. QuickBlue 到底是什么先给结论:QuickBlue 不是一个具体的业务软件,也不是某个大模型的名字,而是一套专门给企业做 AI 应用落地用的“中间层平台”。你可以把它理解成企业 AI 时代的“水电煤接口”——它不直接生产水电煤,但它让…

2026/10/3 15:25:37

密度算符完全指南:从混合态到量子噪声与纠缠判定

做量子计算方向的人,尤其是刚开始啃量子信息理论的同学,几乎都会在某个阶段撞上同一个坎:前面几章还在用波函数 |ψ⟩ 描述一切,到了讲量子噪声、开放系统、部分测量、纠缠判定的时候,所有公式突然都换成了 ρ&#xf…

2026/10/3 15:25:37

UE5、3A与开放世界:从刀光材质到网络同步的技术拆解

1. 从一场发布会聊起:UE5、3A、开放世界到底在说什么如果你最近刷到过腾讯游戏发布会的相关消息,大概率会被几个词反复轰炸:UE5、3A、开放世界。这三个词放在一起,基本就是当下游戏行业最顶配的“技术三件套”。但很多人看完发布会…

2026/10/3 15:20:37

Python机器学习光伏功率预测项目实战:从数据清洗到模型融合

简介:本资源为基于Python机器学习的光伏功率预测完整项目包,面向新能源数据分析、电力负荷预测方向的学习者与算法入门者,帮助解决从原始气象数据到功率预测建模的全流程实践问题。包内共16个文件,以8个csv训练与测试数据集、4个p…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑