【C++探索之路】STL---string

走进C++的世界,也意味着我们对编程世界的认知达到另一个维度,如果你学习过C语言,那你绝对会有不一般的收获,感受到C++所带来的码云风暴~
---------------------------------------begin---------------------------------------
什么是string:
在C++编程中,字符串(String)是一种非常基本且强大的数据类型,用于存储和操作文本数据
。与C语言中的字符数组相比,C++标准库中的std::string类提供了更为丰富和便捷的功能。
string的概念:
string是计算机科学中一种基本的数据类型,用于表示由字符组成的序列。它在不同的编程语言中有不同的实现方式,但核心功能相似,包括存储、操作和处理字符串。- 在C++中,
std::string是标准库中的一个类,用于高效地管理字符串数据。它通过动态内存分配来存储字符,并提供了丰富的成员函数来操作字符串。
string基础:
1.1 引入头文件
要使用std::string,首先需要包含头文件<string>:

1.2 创建和初始化
可以通过多种方式创建和初始化std::string对象:

1.3 基本操作
- 长度获取:
str.length()或str.size()返回字符串的长度。 - 拼接:
str += " more text";或使用str.append(" more text");。 - 访问字符:
str[index]或str.at(index)(at方法在越界时会抛出异常)。 - 子串:
str.substr(pos, len)返回从pos开始长度为len的子串。
在前面我们讲解过C++的类和对象中的构造函数,析构函数在string中同样适用哦~
- 构造函数:
string():默认构造函数,创建一个空字符串。string(const char* str):使用C风格字符串构造string对象。string(const string& s):拷贝构造函数,用于复制另一个string对象。string(size_t n, char c):用指定字符重复构造字符串。
- 析构函数:
\~string()负责释放动态分配的内存,确保资源管理的正确性。
string的成员变量与内部实现:
string类通常包含以下成员变量:_str:指向动态分配的字符数组的指针。_size:存储字符串的实际长度。_capacity:存储分配空间的大小。
- 内部实现上,
string底层通过边长数组的方式存储字符串,并使用指针管理内存。
访问与遍历
- 使用
[]运算符访问单个字符。 - 使用迭代器遍历字符串内容,例如:


- 注意:迭代器访问时需防止越界!!!
2.1 查找和替换
- 查找:
str.find("substring")返回子串第一次出现的位置,若未找到则返回std::string::npos。 - 替换:
str.replace(pos, len, "new_substring")从pos开始替换长度为len的部分为新的子串。
2.2 修改字符串
- 插入:
str.insert(pos, "inserted_text")在pos位置插入文本。 - 删除:
str.erase(pos, len)从pos开始删除长度为len的字符。
2.3 转换
- C风格字符串转换:
str.c_str()返回一个指向以null结尾的字符数组的指针,可以与需要C风格字符串的函数兼容。 - 数字转换:虽然
std::string本身不提供直接的数字到字符串的转换,但可以使用std::to_string函数(需要包含<string>和<cstdlib>或<cmath>头文件)。
高级应用:
3.1 字符串流
std::stringstream类允许在字符串和流之间进行转换,非常适合于解析和构建复杂的字符串数据:
#include <sstream>
std::stringstream ss;
ss << "Number: " << 123 << ", Text: Hello";
std::string result;
ss >> result; // 只读取到第一个空格前的部分,即"Number:"
为了读取整个流,可以使用循环或特定的分隔符处理。
3.2 字符串哈希
在某些应用场景下,需要对字符串进行哈希处理。虽然C++标准库没有直接提供字符串哈希函数,
但可以通过自定义哈希函数来实现:
#include <functional> // for std::hashstd::hash<std::string> hash_fn;
size_t hash_value = hash_fn("example string");
3.3 字符串分割
标准库没有直接提供字符串分割函数,但可以通过组合使用std::string的成员函数和算法来实现:
#include <vector>
#include <algorithm>
#include <cctype>std::vector<std::string> split(const std::string& s, char delimiter) {std::vector<std::string> tokens;std::string token;for (char c : s) {if (c == delimiter) {if (!token.empty()) {tokens.push_back(token);token.clear();}} else {token += c;}}if (!token.empty()) {tokens.push_back(token);}return tokens;
}
string的用法还有很多,需要我们慢慢学习并且用上哦~
----------------------------------------end----------------------------------------
相关文章:
【C++探索之路】STL---string
走进C的世界,也意味着我们对编程世界的认知达到另一个维度,如果你学习过C语言,那你绝对会有不一般的收获,感受到C所带来的码云风暴~ ---------------------------------------begin--------------------------------------- 什么是…...
[LeetCode] 字符串 I — 344#反转字符串 | 541#反转字符串II | 54K替换数字
字符串 基础知识344# 反转字符串541# 反转字符串II54K 替换数字 基础知识 字符串的结尾:空终止字符00 char* name "hello"; // 字符串不可拓展(由于是一个固定分配的内存块),有些地方必须加const char name2[5] {h,…...
使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化
使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化 前言环境准备运行 Oracle Database 23ai Free 容器基本命令参数说明示例 注意事项高级配置参数说明 总结 前言 Oracle Database 23ai Free 是 Oracle 提供的免费版数据库,基于 Oracle …...
rust 发包到crates.io/ 操作流程 (十)
第一步github登录 https://crates.io/ 在项目里面login: cargo login ciol4sMwaR61YvzWniodRlssk6RfS4HcZTU --registry crates-io如果不想每次带 这个,就执行 vim ~/.cargo/config.toml 添加下面 [registry] default "crates-io"git a…...
GD32L233RB 驱动数码管
1.数码管有8段A、B、C、D、E、F、G 和 H小数点 以及片选信号(DIG) DIG用来选择那一位,A-G 用来显示段 静态显示每次只能一次显示单个位 动态显示(动态扫描)所有的位显示结束要在10ms左右 显示2ms 消光1ms 实…...
MongoDB部署模式
目录 单节点模式(Standalone) 副本集模式(Replica Set) 分片集群模式(Sharded Cluster) MongoDB有多种部署模式,可以根据业务需求选择适合的架构和部署方式。 单节点模式(Standa…...
国自然重点项目|代谢影像组学只能预测肺癌靶向耐药的关键技术与应用|基金申请·25-01-25
小罗碎碎念 今天和大家分享一个国自然重点项目,项目执行年限为2019.01 - 2023.12,直接费用为294万。 项目聚焦肺癌靶向治疗中药物疗效预测难题,整合多组学与代谢影像数据展开研究。 在研究过程中,团队建立动物模型获取多维数据&am…...
NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划
引言:NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品, 浓缩每周 NFT 新闻,为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据,艺术新闻类,游戏新闻类,虚拟…...
Word 中实现方框内点击自动打 √ ☑
注: 本文为 “Word 中方框内点击打 √ ☑ / 打 ☒” 相关文章合辑。 对第一篇增加了打叉部分,第二篇为第一篇中方法 5 “控件” 实现的详解。 在 Word 方框内打 √ 的 6 种技巧 2020-03-09 12:38 使用 Word 制作一些调查表、检查表等,通常…...
GoFrame MongoDB 使用指南
GoFrame MongoDB 使用指南 1. 安装依赖 # 安装官方MongoDB驱动 go get -u go.mongodb.org/mongo-driver/mongo go get -u go.mongodb.org/mongo-driver/mongo/options go get -u go.mongodb.org/mongo-driver/bson2. MongoDB 连接示例 package mainimport ("context&qu…...
Cpp::静态 动态的类型转换全解析(36)
文章目录 前言一、C语言中的类型转换二、为什么C会有四种类型转换?内置类型 -> 自定义类型自定义类型 -> 内置类型自定义类型 -> 自定义类型隐式类型转换的坑 三、C强制类型转换static_castreinterpret_castconst_castdynamic_cast 四、RTTI总结 前言 Hell…...
4.flask-SQLAlchemy,表Model定义、增删查改操作
介绍 SQLAlchemy是对数据库的一个抽象 开发者不用直接与SQL语句打交道 Python对象来操作数据库 SQLAlchemy是一个关系型数据库 安装 flask中SQLAlchemy的配置 from flask import Flask from demo.user_oper import userdef create_app():app Flask(__name__)# 使用sessi…...
基于 WEB 开发的手机销售管理系统设计与实现内容
标题:基于 WEB 开发的手机销售管理系统设计与实现 内容:1.摘要 摘要:随着智能手机的普及和电子商务的快速发展,手机销售行业面临着越来越多的挑战和机遇。为了提高销售效率和管理水平,本文设计并实现了一个基于 WEB 的手机销售管理系统。该系…...
JavaScript 验证 API:全面解析与实战指南
JavaScript 验证 API:全面解析与实战指南 引言 随着互联网技术的不断发展,前端开发领域的重要性日益凸显。JavaScript 作为前端开发的核心技术之一,其功能性和可扩展性得到了广泛关注。验证功能是JavaScript中不可或缺的一部分,它保证了用户输入数据的正确性和有效性。本…...
20250122-正则表达式
1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…...
SpringBoot3+Vue3开发学生选课管理系统
功能介绍 分三个角色登录:学生登录,老师登录,教务管理员登录,不同用户功能不同! 1.学生用户功能 选课记录,查看选课记录,退选。选课管理,进行选课。通知管理,查看通知消…...
Effective C++ 规则47: 请使用 Traits Class 表现类型信息
1、背景 C 是一种静态类型语言,类型的特性在编译期就可以被识别和操作。为了更好地利用编译期信息来编写高效、灵活、可维护的代码,C 提供了一些技术来“萃取”或“提取”类型的相关信息。即利用 traits 类来封装和提取类型信息,以便在编译期…...
媒体新闻发稿要求有哪些?什么类型的稿件更好通过?
为了保证推送信息的内容质量,大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中,不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些?就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...
“AI教学实训系统:打造未来教育的超级引擎
嘿,各位教育界的伙伴们,今天我要跟你们聊聊一个绝对能让你们眼前一亮的教学神器——AI教学实训系统。作为资深产品经理,我可是亲眼见证了这款系统如何颠覆传统教学,成为未来教育的超级引擎。 一、什么是AI教学实训系统?…...
基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【2024年华为OD机试】(A卷,200分)- 查找树中元素 (JavaScriptJava PythonC/C++)
一、问题描述 题目解析 题目描述 题目要求根据输入的坐标 (x, y) 在树形结构中找到对应节点的内容值。其中: x 表示节点所在的层数,根节点位于第0层,根节点的子节点位于第1层,依此类推。y 表示节点在该层内的相对偏移,从左至右,第一个节点偏移为0,第二个节点偏移为1,…...
Pyecharts图表交互功能提升
在数据可视化中,交互功能可以极大地提升用户体验,让用户能够更加深入地探索数据。Pyecharts 提供了多种强大的交互功能,本篇将重点介绍如何使用缩略轴组件、配置图例交互,让我们的数据可视化作品更加生动有趣。 一、缩略轴组件使…...
用layui表单,前端页面的样式正常显示,但是表格内无数据显示(数据库连接和获取数据无问题)——已经解决
这是我遇到的错误 原因:后端控制台的数据格式没有设置清楚 解决:1、加注释 ResponseBody ,确保返回的是json数据。 2、要传三个参数到前端,如下图第二个红色框框所示。因为layui框架代码如果未修改,默认要传入这三个…...
单片机基础模块学习——按键
一、按键原理图 当把跳线帽J5放在右侧,属于独立按键模式(BTN模式),放在左侧为矩阵键盘模式(KBD模式) 整体结构是一端接地,一端接控制引脚 之前提到的都是使用了GPIO-准双向口的输出功能&#x…...
elk 安装
创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...
2025年1月22日(什么是扫频)
扫频(Sweep Frequency)是一种信号处理技术,通常用于系统识别、频率响应分析和特性测试。它通过发送一个频率逐渐变化的信号(通常是正弦波或线性调频信号)来激励系统,然后测量系统的响应。这种方法可以帮助我…...
mybatis是什么?有什么作用?mybatis的简单使用
mybatis是什么? MyBatis 是一个持久层框架。 有什么作用? 简化了对数据库数据的操作。 如何简化数据操作的? MyBatis 通过提供 SQL 映射、动态 SQL、结果映射、事务管理等功能,我们直接去用就可以了。 怎么使用?&…...
webpack 打包自己的--windows
第一步安装node 1、安装nodejs:https://nodejs.org/zh-cn/download/releases/ 一、Window系统配置: 打开命令窗口,进入当前工程目录 npm配置淘宝镜像:npm config set registry http://registry.npm.taobao.org/ npm安装parcel-bundler:npm install -g parcel-bund…...
微服务学习-Nacos 注册中心实战
1. 注册中心的设计思路 1.1. 微服务为什么会用到注册中心? 服务与服务之间调用需要有服务发现功能;例如订单服务调用库存服务,库存服务如果有多个,订单服务到底调用那个库存服务呢(负载均衡器)࿰…...
MySQL数据库 - 语法知识
一 数据模型 1 关系型数据库管理系统(RDBMS) 概念:建立在关系模型基础上,有多张相互连接的二维表组成的数据库。 特点: 使用表存储数据,格式统一,便于维护。使用SQL语言操作,标准…...
