news 2026/5/12 8:54:52

14. 字符串

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
14. 字符串

1.字符串字面量

2.C 风格字符串(基于字符数组的字符串)

3.C++ 标准库 string 类

4.字符串字面量与 std::string 的转换


1.字符串字面量

字符串字面量是C++中最基础的字符串形式,你可以把它理解为直接用双引号""包裹的字符序列 比如"hello""C++ string"都属于字符串字面量1).核心特性 a.本质 字符串字面量在内存中是以constchar[](常量字符数组)的形式存储的,并且自动在末尾添加\0(空字符)作为结束标志 b.只读属性 字符串字面量存储在程序的只读内存区域,不能修改,强行修改会导致程序崩溃 c.转义字符 支持转义字符(如\n换行、\t制表符、\"表示双引号本身)
2).代码示例#include <iostream>usingnamespacestd;intmain(){// 基础的字符串字面量constchar*str_literal="Hello, C++!";// 推荐用const修饰,明确只读属性cout<<str_literal<<endl;// 输出:Hello, C++!// 转义字符的使用constchar*escape_str="Line1\nLine2\tTab\"Quote\"";cout<<escape_str<<endl;/* 输出: Line1 Line2 Tab"Quote" */// 错误示例:试图修改字符串字面量(会导致程序崩溃)// str_literal[0] = 'h'; // 编译可能警告,运行时崩溃// 字符串字面量可以拼接(多个双引号包裹的序列会自动合并)constchar*concat_str="Hello"" ""World";cout<<concat_str<<endl;// 输出:Hello Worldreturn0;}

2.C 风格字符串(基于字符数组的字符串)

C风格字符串是从C语言继承来的,本质是以\0结尾的char类型数组,但可以修改,因为存储在"可写内存区"1).声明与初始化"必须保证数组末尾有\0, 否则无法被正确识别为字符串"(会出现乱码)
#include <iostream>#include <cstring>// 必须包含该头文件,使用C风格字符串的操作函数usingnamespacestd;intmain(){// 方式1:直接初始化(自动添加'\0')charc_str1[]="Hello";// 数组长度为6(5个字符 + '\0')cout<<"长度:"<<strlen(c_str1)<<endl;// 输出:5(strlen只算有效字符,不含'\0')cout<<"数组大小:"<<sizeof(c_str1)<<endl;// 输出:6(包含'\0')// 方式2:手动初始化(必须显式加'\0')charc_str2[6]={'H','e','l','l','o','\0'};cout<<c_str2<<endl;// 输出:Hello// 错误示例:缺少'\0',输出乱码charc_str3[5]={'H','e','l','l','o'};cout<<c_str3<<endl;// 输出:Hello + 随机乱码(直到找到内存中的'\0')return0;}
2).C风格字符串的常用操作(依赖<cstring>)


3.C++ 标准库 string 类

C++推荐使用的字符串类型,封装了字符数组的底层细节,更安全、易用、支持动态长度,需要包含头文件<string>1).核心优势 a.自动管理内存,无需手动处理\0和数组长度 b.支持运算符重载(+拼接、=赋值、==比较、[]访问字符等)c.提供丰富的成员函数(获取长度、查找、替换、清空等)
2).声明和常用操作#include <iostream>#include <string>// 必须包含该头文件usingnamespacestd;intmain(){// 初始化方式strings1="Hello";// 直接赋值strings2("World");// 构造函数初始化strings3=s1+" "+s2;// 拼接(支持+运算符)cout<<s3<<endl;// 输出:Hello World// 常用成员函数cout<<"字符串长度:"<<s3.size()<<endl;// 输出:11(等价于length())cout<<"第一个字符:"<<s3[0]<<endl;// 输出:H(支持[]访问)cout<<"查找子串:"<<s3.find("World")<<endl;// 输出:6(返回子串起始下标)// 修改字符串s3.replace(0,5,"Hi");// 从下标0开始,替换5个字符为"Hi"cout<<"替换后:"<<s3<<endl;// 输出:Hi World// 清空字符串s3.clear();cout<<"清空后是否为空:"<<s3.empty()<<endl;// 输出:1(true)return0;}

4.字符串字面量与 std::string 的转换

a.字符串字面量转换为std::string,直接赋值即可 b.std::string转换为字符串字面量,c_str()
#include <iostream>#include <string>usingnamespacestd;intmain(){// 1. 字符串字面量 → std::string(直接赋值即可)constchar*c_str="Hello";strings=c_str;cout<<s<<endl;// 输出:Hello// 2. std::string → 字符串字面量(用c_str())strings2="World";constchar*c_str2=s2.c_str();// 必须用const char*接收cout<<c_str2<<endl;// 输出:Worldreturn0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 14:43:39

导师推荐9个降AIGC网站,千笔AI助你轻松降AI率

AI降重工具&#xff1a;让论文更自然&#xff0c;让学术更真实 随着人工智能技术的不断发展&#xff0c;越来越多的本科生在撰写论文时开始依赖AI写作工具。然而&#xff0c;这些工具生成的内容往往带有明显的AI痕迹&#xff0c;导致AIGC率偏高&#xff0c;影响论文的原创性和通…

作者头像 李华
网站建设 2026/5/10 10:12:48

7000长文:一文读懂Agent,大模型的下一站

什么是Agent&#xff1f;为什么是Agent&#xff1f; 大模型除了Chat外还能做什么用&#xff1f; 当我们将大型模型视为“核心调度器“时&#xff0c;它就变成了我们的Agent。借助任务规划、记忆及外部工具等能力&#xff0c;大型模型能够识别出应该执行的任务以及执行方式&am…

作者头像 李华
网站建设 2026/5/11 14:43:31

清华柔性存内计算芯片登Nature!智能柔性电子将低成本进入生活

生活中&#xff0c;我们口袋里的手机、手腕上的手表、甚至汽车里的导航仪&#xff0c;它们功能强大&#xff0c;形态却始终受制于坚硬的硅基芯片。如果想要让电子设备像创可贴一样贴在手背监测心率&#xff0c;或者像保鲜膜一样附着在机器人的关节上&#xff0c;就需要打破这种…

作者头像 李华
网站建设 2026/5/11 12:35:47

西门子 S7 - 200 与 MCGS 打造三轴机械手控制系统全解析

西门子s7-200 mcgs基于PLC的三轴机械手控制系统 带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 在自动化控制领域&#xff0c;基于 PLC&#xff08;可编程逻辑控制器&#xff09;构建的三轴机械手控制系统应用广泛。今天咱就唠唠如何用西门子 S7 - 2…

作者头像 李华
网站建设 2026/5/9 21:51:53

2026运维监控如何选?四款主流系统深度对比与选型指南

步入2026年&#xff0c;IT架构正朝着“混合云常态化、信创深度落地、智能运维普及”的方向加速演进&#xff0c;企业面临的运维挑战愈发复杂&#xff1a;新老架构并存导致监控工具碎片化、容器与微服务激增引发告警风暴、故障根因定位依赖人工经验、信创替代与合规要求双重压力…

作者头像 李华
网站建设 2026/5/11 18:15:09

<span class=“js_title_inner“>【医学影像】微信群来了!</span>

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可以获得最新顶会/顶刊上的论文idea和CV从入门到精通资料&#xff0c;及最前沿应用&#xff01;发论文/搞科研/涨薪&#xff0c;强烈…

作者头像 李华