当前位置: 首页 > news >正文

【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是一门面向对象编程的语言&#xff0c;封装是面向对象编程中的一种重要概念&#xff0c;它把数据和方法包装在一起&#xff0c;实现了对数据的保护和控制。Python封装接口的优势如下&#xff1a; 1.安全性 封装可以保证数据的安全性&#xff0c;禁止外部对数据的直接访…...

LeetCode 49 字母异位词分组

LeetCode 49 字母异位词分组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/group-anagrams/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个字符串数组&#x…...

( 链表) 142. 环形链表 II——【Leetcode每日一题】

❓142. 环形链表 II 难度&#xff1a;中等 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定…...

论文解读 | 基于改进点对特征的点云6D姿态估计

原创 | 文 BFT机器人 01 摘要 点对特征(PPF)方法已被证明是一种有效的杂波和遮挡下的姿态估计方法。 文章的改进方法主要包括: (1)一种基于奇偶规则求解封闭几何的法向的方法; (2)通过将体素网格划分为等效角度单元的有效降采样方法; (3)基于拟合点的验证步骤。在真实杂波数据集…...

Shell脚本while循环语句应用

记录&#xff1a;433 场景&#xff1a;Shell脚本while循环语句应用。Shell脚本while循环语句应用。while do done、while : do done、while true do done。 版本&#xff1a;CentOS Linux release 7.9.2009。 1.while常用格式 1.1格式一&#xff1a;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】

前置准备&#xff1a; 分别提供订单系统&#xff08;OrderService&#xff09;和用户系统&#xff08;UserService&#xff09;。订单系统主要负责订单相关信息的处理&#xff0c;用户系统主要负责用户相关信息的处理。 一、服务注册与发现 1.1、在父工程当中引入Nacos依赖 …...

pinia状态管理 用法

Pinia是一个用于vue的状态管理库&#xff0c;类似于vuex,是vue的另一种状态管理工具。 Pinia 是 Vue 的存储库&#xff0c;它允许跨组件/页面共享状态。实际上&#xff0c;Pinia就是Vuex的升级版&#xff0c;官网也说过&#xff0c;为了尊重原作者&#xff0c;所以取名pinia&am…...

Oracle客户端版本安装

一、版本准备 Oracle版本下载官网&#xff1a;Instant Client for Linux x86-64 (64-bit) | Oracle 中国 进入网站下载对应的oracle版本&#xff0c;通常环境所用的包有&#xff1a;basic、sdk、sdkplus三个包。包的类型分为rpm和zip包&#xff0c;均可以下载&#xff0c;当前…...

基于Android studio二手车交易系统app

客户端&#xff1a; 用户注册&#xff1a;通过输入用户名&#xff0c;密码&#xff0c;所在地&#xff0c;联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看&#xff1a;用户注册登录系统后&#xff0c;可以查看二手车的基本信息&#xff0c;通过二手车的品牌…...

【LCD应用编程】绘制点、线、矩形框

之前获取LCD屏幕参数信息时了解到&#xff0c;LCD屏是 FrameBuffer 设备&#xff0c;操作 FrameBuffer 设备 其实就是在读写 /dev/fb0 文件。除此之外&#xff0c;LCD屏上包含多个像素点&#xff0c;绘制点、线、矩形框本质是在修改这些像素点的颜色。 目录 1、定义 lcd_color…...

第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的IR值&#xff0c;第二个值是实时的心跳&#xff0c;第三个值是平均心跳&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;MAX30102心率传感器的外观如下…...

【MySQL】MySQL主从同步延迟原因与解决方案

文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题&#xff1a;3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;…...

学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a;学C的第二十一天【初阶测评讲解&#xff1a;1. 计算递归了几次&#xff1b;2. 判断 do while 循环执行了几次&#xff1b;3. 求输入的两个数的最小公倍数&#xff1b;4. 将一句话的单词进…...

测试计划模板一

测试计划 修订历史记录 版本        日期       AMD       修订者      说明      1.0 XXXX年XX月XX (A-添加,M-修改,D-删除) 目录 1. 简介.. 4 1. 1目的... 4 1. 2背景... 4...

【利用AI让知识体系化】5种创建型模式

文章目录 创建型模式简介工厂模式抽象工厂模式单例模式建造者模式原型模式 创建型模式 简介 创建型模式&#xff0c;顾名思义&#xff0c;是用来创建对象的模式。在软件开发中&#xff0c;对象的创建往往比一般的编程任务更为复杂&#xff0c;可能涉及到一些琐碎、复杂的过程…...

Unity的UnityStats: 属性详解与实用案例

UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具&#xff0c;它提供了一系列的属性值&#xff0c;可以帮助开发者解游戏的运行情况&#xff0c;从而进行优化。本文将详细介绍 UnityStats 的每个属性值&#xff0c;并提供多个使用例子帮助开发者…...

TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空&#xff0c;直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp&#xff0c;6060/tcp&#xff0c;…...

Android 12.0无源码apk设置默认启动Launcher的相关属性

1.概述 在12.0的系统产品开发中,对于一些产品的需求,需要将一些无源码app的某个MainActivity作为启动Launcher页面的功能实现,由于没有源码,所以需要 利用PMS的安装解析apk的AndroidManifest.xml的时候,在判断是某个Activity的时候,设置Lancher属性来实现某些功能 2.无源…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...