【String——简单使用】

news/2024/11/27 3:50:20/

文章目录

    • 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 类型相互转换的一些方法,掌握了这些方法,可以更加灵活地处理字符和整数之间的关系。


http://www.ppmy.cn/news/97327.html

相关文章

Mysql函数大全

前言 MySQL提供了众多功能强大、方便易用的函数&#xff0c;使用这些函数&#xff0c;可以极大地提高用户对于数据库的管理效率&#xff0c;从而更加灵活地满足不同用户的需求。本文将MySQL的函数分类并汇总&#xff0c;以便以后用到的时候可以随时查看。 数学函数 &#xf…

随机数发生器设计(二)

一、软件随机数发生器组成概述 密码产品应至少包含一个随机比特生成器。 软件随机数发生器应遵循GM/T 0105-2021《软件随机数发生器设计指南》要求&#xff0c;使用SM3或SM4算法作为生成随机比特算法。 本文以SM3算法为例描述软件随机数发生器的一个设计实例。需要注意的是&a…

SpringCloud Alibaba Sentinel

SpringCloud Alibaba Sentinel Sentinel 基础 官网 1 Github: https://github.com/alibaba/Sentinel 2 快速开始: https://sentinelguard.io/zh-cn/docs/quick-start.html 3 中文: https://github.com/alibaba/Sentinel/wiki/介绍 4 使用手册: https://spring-cloud-alib…

如何顺序处理设备上报的数据

1. 引言 随着智能技术的发展&#xff0c;市场上出现了很多的智能设备&#xff0c;其具有连接网络的能力。用户可以实现远程控制&#xff0c;并且设备也可上报自己的状态&#xff0c;实现云端对设备的运行情况分析。在某些情况下需要保证设备上报状态的有序性&#xff0c;例如传…

光力转债上市价格预测

光力转债 基本信息 转债名称&#xff1a;光力转债&#xff0c;评级&#xff1a;A&#xff0c;发行规模&#xff1a;4.0亿元。 正股名称&#xff1a;光力科技&#xff0c;今日收盘价&#xff1a;22.53元&#xff0c;转股价格&#xff1a;21.46元。 当前转股价值 转债面值 / 转股…

Three.js--》实现3d汽车模型展览搭建

目录 项目搭建 初始化three.js基础代码 添加汽车模型展示 动态修改汽车模型 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还是借助…

《低代码指南》——维格云低代码工作流介绍

工作流模块是在 维格云 表格功能的基础上提供对工作流程的管理。通过 维格云 工作流,我们可以对团队中的工作流程建立一个正式的模型,明确一个工作流程包含哪些阶段,每个阶段由什么人负责,需要完成哪些事项。通过定义工作流,我们可以让团队中的协作更明确和有序。 ●工作流…

把Kubernetes用于微服务管理的最佳实践

把Kubernetes用于微服务管理的最佳实践 一、 引言1 什么是 Kubernetes2 Kubernetes 的优势和应用场景3 为什么使用 Kubernetes 部署容器化应用程序 二、 准备工作1 安装 Kubernetes2 准备容器镜像3 准备 Kubernetes 配置文件 三、 部署应用程序1 创建 Kubernetes 命名空间2 创建…