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

[初学rust] 04_rust复合类型

rust复合类型

字符串

由于rust的字符串元素类型是u8(1字节),但是字符类型是unicode(4字节)

  • 索引不能像C++那样读取
  • 又由于String类型和&str类型都是utf-8编码,中文占3字节
  • 切片可能会导致崩溃

slice(切片)

切片就是对String类型中的一部分的引用,它不会拥有自己的内存空间。

  • 这个就是C++中的string_view
  • 类型标识 &str
  • 由于编码问题对于汉字切片可能导致崩溃,所以可以用 utf8_slice
创建slice
let s = String::from("hello");
let hello = &s[0..5]; // 从索引0开始,到索引4结束
let hello = &s[0..4]; // 从索引0开始,到索引4结束
let hello = &s[..4] // 从索引0开始,到索引4结束
let hello = &s[..]; // 从索引0开始,到字符串最后一个字符结束
let hello = &s[1..] // 从索引1开始,到字符串最后一个字符结束

&[begin, end],实际上取得索引左闭右开的区间[begin, end)

insert

使用insert插入单个字符
insert_str插入字符串字面量

push

push方法只能在String类型上调用,不能在&str上调用。

  • push()向字符串尾部追加字符
  • push_str()字符串字面值。

replace

replace替换字符串中的一个子串
返回的是一个新的字符串,不会修改原来的字符串

replace()
let mut s = String::from("hello world");
let new_s = s.replace('o', '0'); // 替换所有的o为0
replacen()

多一个参数:代表要替换的个数

let mut s = String::from("hello world");
let new_s = s.replacen('o', '0', 1); // 替换第一个o为0
replcae_range()

第一个参数代表要替换的范围,第二个参数是替换成什么。

let mut s = String::from("hello world");
let new_s = s.replace_range(0..5, "hi"); // 替换从索引0开始,到索引4结束的字符串为"hi"

delete

pop

删除并返回字符串的唯一一个字符,若字符串为空,则返回None

let mut s = String::from("hello");
let ch = s.pop(); // 删除并返回最后一个字符
remove

删除指定索引的字符,并返回被删除的字符。

let mut s = String::from("hello world");
let ch = s.remove(0); // 删除并返回第一个字符
truncate

删除从指定位置开始到结尾的全部字符,无返回值

clear

清空

concatenate

+,+=

使用 + 或者 += 连接两个字符串。
要求右边使用是切片引用类型,(本质调用底层 add())

format!
let s1 = String::from("tic");
let s2 = String::from("tac");
let s = format!("{}{}", s1, s2); // 连接字符串

元组

  • 元组类型由各个元素的类型构成,用圆括号()表示。
  • 元组长度固定
  • 顺序也固定
http://www.lryc.cn/news/349873.html

相关文章:

  • 什么是Zoho CRM客户关系系统管理?
  • 青岛东软载波子公司东软载波微电子授权世强硬创代理,出货量累计超20亿颗
  • YOLO损失函数——SIoU和Focal Lossr损失函数解析
  • C++:编程世界的永恒之石
  • 线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?
  • Rust 语言的“命名空间” —— mod
  • 加速科技突破2.7G高速数据接口测试技术
  • 从0开始搭建一个react项目 第一 二 三天
  • LSTM与GAN创新结合!模型性能起飞,准确率超98%
  • E2E测试学习
  • 基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型
  • GSCoolink GSV6125 替LT6711A HDMI2.0转Type-C/DP1.4
  • 【自然语言处理】【大模型】DeepSeek-V2论文解析
  • 前端面试题日常练-day10 【面试题】
  • conan2 基础入门(04)-指定编译器(gcc为例)
  • 谈谈std::map的lower_bound
  • 不知道代理IP怎么挑?一文带你了解挑选的关键点!
  • java 并发线程应用
  • Java面试八股文(SpringCloud篇)
  • PWRWER
  • 怎样恢复E盘里删了的文件夹,2024让EasyRecovery来帮你轻松恢复
  • OSPF实验
  • 喜茶·茶坊黑金首店入驻北京三里屯,率先引入珍稀娟姗奶制茶
  • C++(week3):数据结构与算法
  • ✅HTTPS和HTTP的区别是什么?
  • AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计
  • 快速入门go语言学习笔记
  • MS41908M替代AN41908
  • Lc33---- 414. 第三大的数(java版)---排序(去重/复制到新数组)
  • OpenAI新模型GPT-4o“炸裂登场” 响应速度堪比真人 关键还免费!