【String——简单使用】
文章目录
- String
- 1. 字符串定义和初始化
- 2. 字符串基本操作
- 2.1 访问单个字符
- 2.2 修改字符串内容
- 2.3 字符串查找和比较
- 3. 常用字符串函数
- 3.1 length() 和 size()
- 3.2 empty()
- 3.3 substr()
- 3.4 c_str()
- 4.字符与整形之间相互转换
- 4.1 char 类型转 int 类型
- 4.2 int 类型转 char 类型
- 4.3 stringstream 类型转换
String
string 是 C++ STL 中字符串操作的重要类,它封装了许多字符串操作函数,方便对字符串进行处理。下面介绍一下 string 相关的知识点和函数。
1. 字符串定义和初始化
C++ 中可以使用 char 数组或 string 来表示字符串。char 数组是一种静态数组,需要指定长度,而 string 可以自动调整大小。string 类型需要包含头文件 #include 。
string 类型的变量可以通过以下方式进行初始化:
string s1; // 空字符串
string s2 = "hello"; // 由字符串字面值初始化
string s3 = s2; // 由另一个字符串 s2 初始化
string s4(10, 'c'); // 由 n 个字符 c 构成的字符串
string s5{"hello"}; // C++11 标准引入的新语法
string s6 = {'h', 'e', 'l', 'l', 'o'}; // 由字符列表初始化,C++11 标准引入的新语法
2. 字符串基本操作
2.1 访问单个字符
可以使用数组下标或 at() 函数访问字符串中的单个字符。at() 函数会检查索引是否越界,如果越界则抛出异常。
string s = "hello";
char ch = s[1]; // 访问第二个字符
ch = s.at(3); // 访问第四个字符
2.2 修改字符串内容
可以使用数组下标或 at() 函数修改字符串中的单个字符,也可以使用赋值运算符和 assign() 函数修改整个字符串。另外,还可以使用 insert()、erase() 和 replace() 函数对字符串进行插入、删除和替换操作。
string s = "hello";
s[1] = 'a'; // 将第二个字符改为 a
s.at(3) = 'o'; // 将第四个字符改为 o
s = "world"; // 用字符串 "world" 重载 s
s.assign(10, 'c'); // 将 s 中的所有字符改为 c,总共有 10 个
s.insert(2, "123"); // 在 s 的第三个位置插入字符串 "123"
s.erase(1, 2); // 删除 s 的第二三个字符
s.replace(4, 2, "123"); // 将 s 中从第五个位置开始的两个字符替换成字符串 "123"
2.3 字符串查找和比较
可以使用 find()、rfind()、find_first_of()、find_last_of()、find_first_not_of() 和 find_last_not_of() 等函数在字符串中查找子串或字符,并返回其位置。另外,还可以使用 compare() 函数比较两个字符串的大小关系。
string s = "hello world";
size_t pos = s.find("world"); // 查找字符串 "world",返回其起始位置
pos = s.rfind("l"); // 从后往前查找字符 'l',返回其起始位置
pos = s.find_first_of("aeiou"); // 查找第一个元音字母,返回其起始位置
pos = s.find_last_of("0123456789"); // 从后往前查找数字,返回其位置
pos = s.find_first_not_of("helo wrd"); // 查找第一个不在指定集合中的字符,返回其位置
pos = s.find_last_not_of("dlrow olleh");// 从后往前查找第一个不在指定集合中的字符,返回其位置
int cmp = s.compare("hello world"); // 比较字符串是否相等,相等返回 0,小于则返回负数,大于则返回正数
3. 常用字符串函数
除了上面介绍的基本操作之外,string 类中还提供了许多其他的常用函数,比如 length()、size()、empty()、substr()、c_str() 等等。下面简单介绍一下这些函数。
3.1 length() 和 size()
length() 函数和 size() 函数都可以返回字符串的长度(即字符个数)。
string s = "hello";
int len = s.length(); // 获取字符串长度
len = s.size(); // 同上,两者等价
3.2 empty()
empty() 函数判断字符串是否为空。
string s = "hello";
bool flag = s.empty(); // 判断字符串是否为空,返回 false
s = "";
flag = s.empty(); // 判断字符串是否为空,返回 true
3.3 substr()
substr() 函数可以截取字符串的一部分并返回。
string s = "hello world";
string sub = s.substr(6, 5); // 截取从第七个字符开始的长度为 5 的子串,即 "world"
3.4 c_str()
c_str() 函数返回一个指向以空字符结束的字符数组的指针,它用于将 string 类型转换为 char* 类型的字符串。
string s = "hello";
const char* str = s.c_str(); // 获取 char* 类型的字符串,即 "hello"
4.字符与整形之间相互转换
4.1 char 类型转 int 类型
char 类型的变量本质上就是一个 ASCII 码值,因此可以通过将其强制类型转换为 int 类型来转换成整数。
char ch = '5';
int num = ch - '0'; // 将字符 '5' 转换成整数 5
上面的代码中,将字符 ‘5’ 减去字符 ‘0’ 的 ASCII 码值,得到的就是整数 5。
4.2 int 类型转 char 类型
将一个整数转换为对应的字符,可以使用强制类型转换或者字符字面值的形式。
int num = 5;
char ch = static_cast<char>(num + '0'); // 将数字 5 转换成字符 '5'
ch = num + '0'; // 同上,使用字符字面值的形式
注意,在将数字转换为字符时,需要加上字符 ‘0’ 的 ASCII 码值。因为在 ASCII 码表中,数字字符 ‘0’ 的编码为 48,而数字字符 ‘1’、‘2’、‘3’、…、‘9’ 的编码分别为 49、50、51、…、57。
另外,如果要将一个超过了可表示范围的整数转换为字符,结果是未定义的,可能会出现不可预测的错误。
4.3 stringstream 类型转换
除了上面介绍的方法之外,还可以使用 C++ STL 中的 stringstream 类型来进行字符和整型之间的转换。stringstream 类型用于在字符串流中读取、写入数据,它可以自动转换各种基本类型的数据。
#include <sstream>
using namespace std;int num = 123;
stringstream ss;
ss << num; // 将整数 num 写入 stringstream 对象 ss 中
string str;
ss >> str; // 从 ss 中读取字符串,并将其存储到变量 str 中
在代码执行完第 3 行后,ss 中就包含了整数 123 对应的字符串 “123”。第 5 行中,通过输入运算符 >> 把这个字符串读取到了变量 str 中。
类似地,还可以使用 stringstream 对象从字符串中读取整数,具体示例如下:
#include <sstream>
using namespace std;string str = "456";
stringstream ss(str);
int num;
ss >> num; // 从 ss 中读取字符串 "456",并将其解析成整数,存储到变量 num 中
这样,num 就等于整数 456 了。
以上是 char 和 int 类型相互转换的一些方法,掌握了这些方法,可以更加灵活地处理字符和整数之间的关系。
相关文章:
【String——简单使用】
文章目录 String1. 字符串定义和初始化2. 字符串基本操作2.1 访问单个字符2.2 修改字符串内容2.3 字符串查找和比较 3. 常用字符串函数3.1 length() 和 size()3.2 empty()3.3 substr()3.4 c_str() 4.字符与整形之间相互转换4.1 char 类型转 int 类型4.2 int 类型转 char 类型4.…...
Python下Taobao封装API接口的优势
Python是一门面向对象编程的语言,封装是面向对象编程中的一种重要概念,它把数据和方法包装在一起,实现了对数据的保护和控制。Python封装接口的优势如下: 1.安全性 封装可以保证数据的安全性,禁止外部对数据的直接访…...
LeetCode 49 字母异位词分组
LeetCode 49 字母异位词分组 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/group-anagrams/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给你一个字符串数组&#x…...
( 链表) 142. 环形链表 II——【Leetcode每日一题】
❓142. 环形链表 II 难度:中等 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定…...
论文解读 | 基于改进点对特征的点云6D姿态估计
原创 | 文 BFT机器人 01 摘要 点对特征(PPF)方法已被证明是一种有效的杂波和遮挡下的姿态估计方法。 文章的改进方法主要包括: (1)一种基于奇偶规则求解封闭几何的法向的方法; (2)通过将体素网格划分为等效角度单元的有效降采样方法; (3)基于拟合点的验证步骤。在真实杂波数据集…...
Shell脚本while循环语句应用
记录:433 场景:Shell脚本while循环语句应用。Shell脚本while循环语句应用。while do done、while : do done、while true do done。 版本:CentOS Linux release 7.9.2009。 1.while常用格式 1.1格式一:while do done while c…...
Kubernetes Dashboard + Ingress 及其 yaml 文件分析
概述 记录部署Dashboard Ingress的具体过程及其 yaml 文件分析 Dashboard Yaml # Copyright 2017 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the Li…...
【SpringCloud组件——Nacos】
前置准备: 分别提供订单系统(OrderService)和用户系统(UserService)。订单系统主要负责订单相关信息的处理,用户系统主要负责用户相关信息的处理。 一、服务注册与发现 1.1、在父工程当中引入Nacos依赖 …...
pinia状态管理 用法
Pinia是一个用于vue的状态管理库,类似于vuex,是vue的另一种状态管理工具。 Pinia 是 Vue 的存储库,它允许跨组件/页面共享状态。实际上,Pinia就是Vuex的升级版,官网也说过,为了尊重原作者,所以取名pinia&am…...
Oracle客户端版本安装
一、版本准备 Oracle版本下载官网:Instant Client for Linux x86-64 (64-bit) | Oracle 中国 进入网站下载对应的oracle版本,通常环境所用的包有:basic、sdk、sdkplus三个包。包的类型分为rpm和zip包,均可以下载,当前…...
基于Android studio二手车交易系统app
客户端: 用户注册:通过输入用户名,密码,所在地,联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看:用户注册登录系统后,可以查看二手车的基本信息,通过二手车的品牌…...
【LCD应用编程】绘制点、线、矩形框
之前获取LCD屏幕参数信息时了解到,LCD屏是 FrameBuffer 设备,操作 FrameBuffer 设备 其实就是在读写 /dev/fb0 文件。除此之外,LCD屏上包含多个像素点,绘制点、线、矩形框本质是在修改这些像素点的颜色。 目录 1、定义 lcd_color…...
第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向
0、结果 说明:先来看看串口调试助手显示的结果,第一个值是原始的IR值,第二个值是实时的心跳,第三个值是平均心跳,如果是你想要的,可以接着往下看。 1、外观 说明:MAX30102心率传感器的外观如下…...
【MySQL】MySQL主从同步延迟原因与解决方案
文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题:3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作,…...
学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】
相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期:学C的第二十一天【初阶测评讲解:1. 计算递归了几次;2. 判断 do while 循环执行了几次;3. 求输入的两个数的最小公倍数;4. 将一句话的单词进…...
测试计划模板一
测试计划 修订历史记录 版本 日期 AMD 修订者 说明 1.0 XXXX年XX月XX (A-添加,M-修改,D-删除) 目录 1. 简介.. 4 1. 1目的... 4 1. 2背景... 4...
【利用AI让知识体系化】5种创建型模式
文章目录 创建型模式简介工厂模式抽象工厂模式单例模式建造者模式原型模式 创建型模式 简介 创建型模式,顾名思义,是用来创建对象的模式。在软件开发中,对象的创建往往比一般的编程任务更为复杂,可能涉及到一些琐碎、复杂的过程…...
Unity的UnityStats: 属性详解与实用案例
UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具,它提供了一系列的属性值,可以帮助开发者解游戏的运行情况,从而进行优化。本文将详细介绍 UnityStats 的每个属性值,并提供多个使用例子帮助开发者…...
TDengine集群搭建
我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空,直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp,6060/tcp,…...
Android 12.0无源码apk设置默认启动Launcher的相关属性
1.概述 在12.0的系统产品开发中,对于一些产品的需求,需要将一些无源码app的某个MainActivity作为启动Launcher页面的功能实现,由于没有源码,所以需要 利用PMS的安装解析apk的AndroidManifest.xml的时候,在判断是某个Activity的时候,设置Lancher属性来实现某些功能 2.无源…...
机器学习在犬类癌症筛查中的性能极限与挑战:基于血液数据的多癌种分析
1. 项目概述:当机器学习遇见犬类癌症筛查作为一名长期关注数据科学在生命科学领域应用的从业者,我常常被问及一个充满希望的问题:我们能否像分析人类健康数据一样,利用宠物的常规体检数据,通过机器学习提前发现癌症的蛛…...
Go开发者必备:circuitbreaker API全解析与最佳实践指南 [特殊字符]
Go开发者必备:circuitbreaker API全解析与最佳实践指南 🚀 【免费下载链接】circuitbreaker Circuit Breakers in Go 项目地址: https://gitcode.com/gh_mirrors/circ/circuitbreaker 作为一名Go开发者,你是否经常遇到远程服务调用失败…...
基于KS距离度量交通流分布偏移:提升DRL交通信号控制鲁棒性的工程实践
1. 项目概述与核心挑战在智能交通系统(ITS)领域,基于深度强化学习(DRL)的交通信号控制(Traffic Signal Control)正从研究走向实际部署。作为一名长期关注AI落地应用的从业者,我见过太…...
避坑指南:Unity动态加载模型时,TriLib插件材质丢失、缩放异常的5个常见问题解决
Unity动态加载模型避坑指南:TriLib插件材质丢失与缩放异常的深度解决方案当你在Unity项目中尝试使用TriLib插件动态加载外部模型时,是否遇到过这些令人抓狂的情况:模型加载后材质全部变成刺眼的粉红色,贴图神秘消失,或…...
sd卡分区了数据还能恢复吗,只需3种方法和视频教学,数据就能神奇地回来!
断开读写通信!锁死底层端口!你的sd卡在经历重新分区的一瞬间,其物理层面的扇区正在承受最严酷的逻辑改写。这并非介质烧毁,而是系统内核强行切断了旧有簇链的映射关系,将其标定为休克态。此时若任由操作系统自动加载缩…...
Unity中文语言包安装失败?手动部署全流程详解
1. 为什么Unity编辑器中文语言包总在安装时“卡住”或报错? Unity编辑器自带多语言支持,但中文语言包的安装过程却常年被开发者吐槽——点开Preferences → Localization → Install Language Pack,选中Chinese (Simplified),点击…...
基于概率随机森林的天文测光数据尘埃恒星自动分类实践
1. 项目概述:当机器学习遇见尘埃恒星处理海量天文数据,尤其是从像斯皮策空间望远镜(Spitzer)的SAGE巡天这类项目中获取的多波段测光数据,一直是个既让人兴奋又头疼的活儿。传统的光谱分类方法虽然精准,但面…...
暗黑破坏神2存档编辑器:d2s-editor免费可视化编辑终极指南
暗黑破坏神2存档编辑器:d2s-editor免费可视化编辑终极指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 想要轻松修改暗黑破坏神2存档却不懂十六进制?d2s-editor是你的完美解决方案!这款基于…...
为 Node.js 后端服务配置 Taotoken 作为大模型统一网关
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为 Node.js 后端服务配置 Taotoken 作为大模型统一网关 在构建基于大语言模型的 Node.js 后端服务时,直接对接多个模型…...
别再乱用Bool和Enum了!用UE5的Gameplay Tags重构你的角色状态机(GAS避坑指南)
别再乱用Bool和Enum了!用UE5的Gameplay Tags重构你的角色状态机(GAS避坑指南)当你的ARPG角色同时陷入眩晕、灼烧和减速状态时,传统状态机往往会暴露出致命缺陷——布尔值互相覆盖、枚举组合爆炸、条件判断嵌套成灾。而UE5的Gamepl…...
