揭秘C++ String容器:字符串操作的艺术

目录

​编辑

引言

一、初识std::string:构造与初始化

二、字符串的操纵艺术:拼接、查找与替换

三、访问与遍历:字符的细腻触感

四、大小与容量:动态调整的智慧

五、进阶功能:探索更多可能

结语


引言

      在C++标准库的璀璨星河中,std::string作为字符串处理的中流砥柱,以其实现的优雅和功能的全面性,成为了文本处理任务的首选武器。不同于传统的字符数组,std::string封装了复杂的内存管理和丰富的操作接口,赋予了程序员前所未有的字符串操控能力。本文将深入剖析std::string的奥秘,通过详尽的代码示例,带你领略字符串操作的无限可能。

一、初识std::string:构造与初始化

std::string不仅支持多种构造方式,还能自动管理内存,简化了字符串的创建和初始化过程。

代码示例1:基础构造

#include <iostream>
#include <string>

int main() {
    std::string emptyStr; // 默认构造,创建空字符串
    std::string hello("Hello, World!"); // 字符串字面量构造
    std::string fromChar{'C', 'P', 'L', 'U', 'S', '+'}; // 从字符数组构造
    return 0;
}
二、字符串的操纵艺术:拼接、查找与替换
  • +运算符:轻松拼接字符串。
  • find():查找子串位置。
  • replace():替换子串。
  • substr():提取子串。

代码示例2:字符串操作

std::string greeting = "Hello, ";
std::string name = "Alice";
std::string message = greeting + name + "!"; // 拼接字符串
size_t pos = message.find("Alice"); // 查找"Alice"位置
message.replace(pos, 5, "Bob"); // 将"Alice"替换为"Bob"
std::string nickname = message.substr(7, 3); // 提取子串"Bob"
三、访问与遍历:字符的细腻触感
  • []运算符:直接访问指定位置的字符。
  • at():带边界检查的安全访问。
  • 迭代器:与STL算法兼容,遍历字符串。

代码示例3:访问与遍历

for(size_t i = 0; i < message.length(); ++i) {
    std::cout << message[i] << " ";
}
// 或使用迭代器
for(auto it = message.begin(); it != message.end(); ++it) {
    std::cout << *it << " ";
}
四、大小与容量:动态调整的智慧
  • size():返回当前字符串长度。
  • length():同size(),返回字符串长度。
  • capacity():返回当前分配的内存容量。
  • resize():调整字符串长度,可选填充值初始化新字符。
  • shrink_to_fit():请求减少内存占用至刚好足够。

代码示例4:容量管理

message.resize(15, '-'); // 调整长度至15,新增字符为'-'
message.shrink_to_fit(); // 尝试缩小内存分配至实际使用大小
五、进阶功能:探索更多可能
  • 比较操作符:直接比较字符串的字典序。
  • c_str():获取C风格字符串指针,适用于需要C接口的场合。
  • append()、insert():提供更多字符串插入方式。
  • erase():删除指定位置或区间的字符。

代码示例5:高级操作

std::string compareStr = "Bob";
if(message > compareStr) {
    std::cout << "Message comes after Bob alphabetically." << std::endl;
}
const char* cStyleStr = message.c_str(); // 获取C风格字符串
message.insert(6, ", how are you?"); // 在位置6插入子串
message.erase(0, 7); // 删除前7个字符
结语

  std::string凭借其强大的功能集和易用性,成为了处理字符串数据的得力助手。掌握它的每一个细节,意味着在处理文本数据时拥有更多的灵活性和效率。本文只是揭开了std::string神秘面纱的一角,鼓励每一位C++开发者深入探索,发掘其更深层面的潜能,让字符串操作在你的代码中流淌出艺术的韵味。

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

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

相关文章

vue3+electron+typescript 项目安装、打包、多平台踩坑记录

环境说明 这里的测试如果没有其他特别说明的&#xff0c;就是在win10/i7环境&#xff0c;64位 创建项目 vite官方是直接支持创建electron项目的&#xff0c;所以&#xff0c;这里就简单很多了。我们已经不需要向开始那样自己去慢慢搭建 yarn create vite这里使用yarn创建&a…

特殊变量笔记3

输入一个错误命令, 在输出$? 特殊变量&#xff1a;$$ 语法 $$含义 用于获取当前Shell环境的进程ID号 演示 查看当前Shell环境进程编号 ps -aux|grep bash输出 $$ 显示当前shell环境进程编号 小结 常用的特殊符号变量如下 特殊变量含义$n获取输入参数的$0, 获取当前She…

将3D检测的box框投影到BEV图片上

前言 点云数据作为一种丰富的三维空间信息表达方式&#xff0c;通常用于自动驾驶、机器人导航和三维建模等领域。然而&#xff0c;点云数据的直观性不如二维图像&#xff0c;这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…

Thymeleaf 搭建家居网首页

文章目录 1.引入Thymeleaf sunliving-commodity模块1.在resources目录下引入Thymeleaf 所需资源2.pom.xml引入Thymeleaf依赖3.application.yml 关闭缓存&#xff0c;使页面实时刷新4.在application-prod.yml开启缓存5.编写com/sun/sunliving/commodity/web/IndexController.jav…

OpenUI 可视化 AI:打造令人惊艳的前端设计!

https://openui.fly.dev/ai/new 可视化UI的新时代&#xff1a;通过人工智能生成前端代码 许久未更新, 前端时间在逛github&#xff0c;发现一个挺有的意思项目&#xff0c;通过口语化方式生成前端UI页面&#xff0c;能够直观的看到效果&#xff0c;下面来给大家演示下 在现代…

idea2023的git从dev分支合并到主分支master

1.本地项目切换到主分支master 右键项目-git-Branches 依次点击项目-Remote-Origin-master-CheckOut 现在你的idea中的这个项目就是远程master分支的代码了。 2.合并dev分支到master 右击项目-git-Merge 选择origin-dev 点击Merge按钮&#xff0c;此时只是合并到本地的maste…

Weblogic XML反序列化漏洞 [CVE-2017-10271]

漏洞环境搭建请参考 http://t.csdnimg.cn/i11e2 漏洞原理 Weblogic的wls security组件对外提供webservice服务&#xff0c;wls security组件使用了xmldecoder来解析用户传入的xml数据&#xff0c;如果用户进行xml恶意数据的构造&#xff0c;即可触发反序列化漏洞 漏洞版本 O…

【MySQL】聊聊count的相关操作

在平时的操作中&#xff0c;经常使用count进行操作&#xff0c;计算统计的数据。那么具体的原理是如何的&#xff1f;为什么有时候执行count很慢。 count的实现方式 select count(*) from student;对于MyISAM引擎来说&#xff0c;会把一个表的总行数存储在磁盘上&#xff0c;…

Dbs封装_连接池

1.Dbs封装 每一个数据库都对应着一个dao 每个dao势必存在公共部分 我们需要将公共部分抽取出来 封装成一个工具类 保留个性化代码即可 我们的工具类一般命名为xxxs 比如Strings 就是字符串相关的工具类 而工具类 我们将其放置于util包中我们以是否有<T>区分泛型方法和非泛…

pycharm连接阿里云服务器过程记录

因为不想用自己的电脑安装anaconda环境,所以去查了一下怎么用服务器跑代码,试着用pycharm连接阿里云服务器,参考了很多博客,自己简单配置了一下,记录一下目前完成的流程. 主要是:阿里云服务器的远程登录和安装anaconda,以及怎么用pycharm连接阿里云服务器上的解释器. 小白刚开始…

Java进阶学习笔记27——StringBuilder、StringBuffer

StringBuilder&#xff1a; StringBuilder代表可变字符串对象&#xff0c;相当于一个容器&#xff0c;它里面装的字符串是可以改变的&#xff0c;就是用来操作字符串的。 好处&#xff1a; StringBuilder比String更适合做字符串的修改操作&#xff0c;效率会更高&#xff0c;…

【FPGA】Verilog:奇校验位生成器的实现(Odd Parity bit generator)

解释奇数奇偶校验位生成器和检查器的仿真结果及过程。 真值表和卡洛图: Odd Parity Bit Generator A B C

利用element实现简单右键

利用element-plus中的el-menu实现简单右键 实现如下 <template><main class"mainClass" contextmenu"showMenu($event)"> </main><el-menu:default-active"1"class"el-menu-demo"mode"vertical":col…

GitHub怎么修改个人资料名称name和用户名username

文档 GitHub•GitHub文档•Get started•帐户和个人资料•配置文件•自定义个人资料•个性化设置https://docs.github.com/zh/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile GitHub•GitHub文档•G…

从XPS迁移到IP Integrator

从XPS迁移到IP Integrator 概述 AMD Vivado™设计套件IP集成器可让您将包含AMD的设计缝合在一起 IP或您的自定义IP在相对较短的时间内&#xff0c;在GUI环境中工作。 就像在Xilinx Platform Studio中一样&#xff0c;您可以快速创建嵌入式处理器设计&#xff08;使用&#xff0…

【STM32】新建工程(江科大)

文章目录 STM32的开发方式库函数文件夹一、新建一个基于标准库的工程1.建立一个存放工程的文件夹2.打开Keil5 二、通过配置寄存器来完成点灯1.配置RCC寄存器2.配置PC13口&#xff08;1&#xff09;配置PC13口的模式&#xff08;2&#xff09;给PC13口输出数据 三、为寄存器添加…

5.26牛客循环结构

1002. 难点&#xff1a; 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路&#xff1a; 与星号双塔差不多&#xff0c;在此基础上加大一点难度 每日练题5.23 &#xff08;EOF用法&#xff09;-CSDN博客 代码 1004 代码

微信小程序如何跳转微信公众号

1. 微信小程序如何跳转微信公众号 1.2. 微信公众号配置 登录微信公众号&#xff0c;点击【小程序管理】&#xff1a;   点击【添加】&#xff1a;   点击【关联小程序】&#xff1a;   输入小程序进行关联&#xff1a; 1.2. 微信小程序配置 登录微信小程序&#xf…

物联网应用开发--传感器数据上传新大陆云平台(STM32+SHT20温湿度+ESP8266+TCP)

实现目标 1、掌握新大陆云平台传感器的创建 2、熟悉STM32 HAL与ESP8266模块之间的通信 3、具体实现目标&#xff1a;&#xff08;1&#xff09;创建2个传感器&#xff1a;温度传感器&#xff0c;湿度传感器;&#xff08;2&#xff09;上传开发板上的SHT20温湿度传感器数据至…

游戏找不到d3dcompiler_43.dll怎么办,教你5种可靠的修复方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler43.dll”。这个问题通常出现在游戏或者图形处理软件中&#xff0c;它会导致程序无法正常运行。为了解决这个问题&#xff0c;我经过多次尝试和总结&#xff0c;找到了以下五…