【Rust】——切片

🎃個人專欄:

🐬 算法設計與分析:算法設計與分析_IT閆的博客-CSDN博客

🐳Java基礎:Java基礎_IT閆的博客-CSDN博客

🐋c語言:c語言_IT閆的博客-CSDN博客

🐟MySQL:數據結構_IT閆的博客-CSDN博客

🐠數據結構:??????數據結構_IT閆的博客-CSDN博客

💎C++:C++_IT閆的博客-CSDN博客

🥽C51單片機:C51單片機(STC89C516)_IT閆的博客-CSDN博客

💻基于HTML5的網頁設計及應用:基于HTML5的網頁設計及應用_IT閆的博客-CSDN博客??????

🥏python:python_IT閆的博客-CSDN博客

🐠離散數學:離散數學_IT閆的博客-CSDN博客

??????🥽Linux:????Linux_Y小夜的博客-CSDN博客

🚝Rust:Rust_Y小夜的博客-CSDN博客

歡迎收看,希望對大家有用!

目錄

🎯前言

🎯引入字符串切片

🎯用字符串切片

🎯字符串字面值


🎯前言

????????在引入切片之前,咱們先看一道題,編寫一個函數,該函數接收一個用空格分隔單詞的字符串,并返回在該字符串中找到的第一個單詞。如果函數在該字符串中并未找到空格,則整個字符串就是一個單詞,所以應該返回整個字符串。

可能會有人這樣寫

fn first_word(s: &String) -> usize {let bytes = s.as_bytes();for (i, &item) in bytes.iter().enumerate() {if item == b' ' {return i;}}s.len()
}

????????現在有了一個找到字符串中第一個單詞結尾索引的方法,不過這有一個問題。我們返回了一個獨立的?usize,不過它只在?&String?的上下文中才是一個有意義的數字。換句話說,因為它是一個與?String?相分離的值,無法保證將來它仍然有效。

然而,Rust 為這個問題提供了一個解決方法:字符串 slice。

🎯引入字符串切片

String?中一部分值的引用,它看起來像這樣:

    let s = String::from("hello world");let hello = &s[0..5];let world = &s[6..11];

????????不同于整個?String?的引用,hello?是一個部分?String?的引用,由一個額外的?[0..5]?部分指定。可以使用一個由中括號中的?[starting_index..ending_index]?指定的 range 創建一個 slice,其中?starting_index?是 slice 的第一個位置,ending_index?則是 slice 最后一個位置的后一個值。

????????對于 Rust 的?..?range 語法,如果想要從索引 0 開始,可以不寫兩個點號之前的值。

????????依此類推,如果 slice 包含?String?的最后一個字節,也可以舍棄尾部的數字

? ? ? ? 提醒:字符串 slice range 的索引必須位于有效的 UTF-8 字符邊界內,如果嘗試從一個多字節字符的中間位置創建字符串 slice,則程序將會因錯誤而退出。

🎯用字符串切片

fn first_word(s: &String) -> &str {let bytes = s.as_bytes();for (i, &item) in bytes.iter().enumerate() {if item == b' ' {return &s[0..i];}}&s[..]
}

????????那個當我們獲取第一個單詞結尾的索引后,接著就清除了字符串導致索引就無效的 bug 嗎?那些代碼在邏輯上是不正確的,但卻沒有顯示任何直接的錯誤。問題會在之后嘗試對空字符串使用第一個單詞的索引時出現。slice 就不可能出現這種 bug 并讓我們更早的知道出問題了 。

Rust 不允許?clear?中的可變引用和?word?中的不可變引用同時存在,因此編譯失敗。

🎯字符串字面值

????????字符串字面值被儲存在二進制文件中。

let s = "Hello, world!";

????????這里?s?的類型是?&str:它是一個指向二進制程序特定位置的 slice。這也就是為什么字符串字面值是不可變的;&str?是一個不可變引用

字符串切片作為參數傳遞:

????????如果有一個字符串 slice,可以直接傳遞它。如果有一個?String,則可以傳遞整個?String?的 slice 或對?String?的引用。

?????????String?引用的函數使得我們的 API 更加通用并且不會丟失任何功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第105講:Mycat垂直分表實戰:從規劃到解決問題的完整指南

文章目錄 1.垂直分表的背景2.垂直分表案例實戰2.1.垂直分表規劃2.2.配置Mycat實現垂直分表2.3.重啟Mycat2.4.在Mycat命令行中導入數據結構2.5.查看由Mycat分表后每個分片上存儲的表2.6.Mycat垂直分表后可能遇到的問題2.7.垂直分表完成 1.垂直分表的背景 我們的商城系統數據庫&…

Unity編輯器下如何獲取物體(GameObject)的中心位置

注意僅能在編輯器下才能使用該方法 實現方式依靠UnityEditor.Tools提供的參數,具體實現如下: 獲取單個物體的中心坐標 public static Vector3 GetGameObjectCenter(GameObject gameObject) {// 選中物體Selection.activeObject gameObject;// 記錄當前…

C#中Byte.Parse的用法,如果需要解析含有數字以外的字符,應該如何使用?

在C#中,Byte.Parse用于將字符串解析為byte類型的數字。它的用法如下: byte result Byte.Parse(str);其中,str是要解析的字符串。 如果要解析的字符串含有數字以外的字符,Byte.Parse會拋出一個FormatException異常。為了處理這種…

javaWebssh水利綜合信息管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh水利綜合信息管理系統是一套完善的web設計系統(系統采用ssh框架進行設計開發),對理解JSP java編程開發語言有幫助,系統具有完整的源代碼和數據庫,系統主要采用B/S模式開發。開發環境為TOMCA…

MATLAB 實現貝葉斯決策

1. 原理 后驗概率: 1.最小錯誤率決策(最大后驗概率決策): 2.最小風險決策: 3.正態分布下的貝葉斯決策 2. 過程 2.1 訓練集數據可視化 導入兩類訓練集數據,并繪制其數據分布,如下:…

云時代【5】—— LXC 與 容器

云時代【5】—— LXC 與 容器 三、LXC(一)基本介紹(二)相關 Linux 指令實戰:使用 LXC 操作容器 四、Docker(一)刪除、安裝、配置(二)鏡像倉庫1. 分類2. 相關指令&#xf…

JavaSE-09(Java IO精華總結)

Java IO 簡單做個總結: 1 .InputStream/OutputStream 字節流的抽象類。2 .Reader/Writer 字符流的抽象類。3 .FileInputStream/FileOutputStream 節點流:以字節為單位直接操作“文件”。4 .ByteArrayInputStream/ByteArrayOutputStream 節點流&#xff…

Running job: job_1709516801756_0003

** yarn運行卡在Running job: job_1709516801756_0003問題解決: ** 在運行wordcount時出現錯誤,一直卡住 運行命令:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 出現錯誤&#xff1a…

嶺回歸算法

回歸分析方法是利用數理統計方法分析數據,建立自變量和因變量間的回歸模型,用于預測因變量變化的分析方法。其中比較經典的是HoerI和Kennard提出的嶺回歸算法。嶺回歸算法是在最小二乘法的基礎上引|入正則項,使回歸模型具有較好泛化能力和穩定…

經典思路!人參葉際微生物如何發8分文章?

中國中醫科學院中藥研究所在《Environmental Microbiome》期刊上(IF7.9)發表了關于葉際真菌微生態網絡的文章,該研究通過對ITS測序結果和環境因子測定結果以及皂苷含量測定結果進行生信分析,提出了維持微生態網絡的穩定性策略和影響皂苷含量的因素。 期刊…

H12-821_113

113.如圖所示是路由器現ATE輸出的部分信息,以下關于這部分信息的描述,錯誤的是哪一項? A.display pim rp-info命令用來查看組播組對應的RP信息 B.RP地址是2.2.2.2 C.組地址是225.0.0.0 D.RP的優先級是0 答案:C 注釋: …

HCIA-Datacom題庫(自己整理分類的)_29_PPP協議判斷【6道題】

1.數據鏈路層采用PPP封裝鏈路兩端的IP地址可以不在同一個網段。√ 2.PPP鏈路兩端不在同一網段不能通信。 3.參考以下拓撲及配置,路由器R1與R2通過Serial低速線纜連接,且數據鏈路層封裝使用PPP。當R1和R2的Holdtime不一致時,PPP協商失敗&…

python使用常用的路徑問題

PythonPath多個路徑的使用 通過命令行直接修改 export PYTHONPATH$PYTHONPATH:/path/to/directoryPythonPath多個路徑的使用 export PYTHONPATH$PYTHONPATH:/path/to/directory1:/path/to/directory2PythonPath多個路徑的使用 python path 移除路徑 python path python中…

爬蟲實戰——麻省理工學院新聞

文章目錄 發現寶藏一、 目標二、 淺析三、獲取所有模塊四、請求處理模塊、版面、文章1. 分析切換頁面的參數傳遞2. 獲取共有多少頁標簽并遍歷版面3.解析版面并保存版面信息4. 解析文章列表和文章5. 清洗文章6. 保存文章圖片 五、完整代碼六、效果展示 發現寶藏 前些天發現了一…

jQuery AJAX get() 和 post() 方法—— W3school 詳解 簡單易懂(二十四)

jQuery get() 和 post() 方法用于通過 HTTP GET 或 POST 請求從服務器請求數據。 HTTP 請求:GET vs. POST 兩種在客戶端和服務器端進行請求-響應的常用方法是:GET 和 POST。 GET - 從指定的資源請求數據POST - 向指定的資源提交要處理的數據 GET 基本…

MySQL面試題-日志(答案版)

日志 1、為什么需要 undo log? (1)實現事務回滾,保障事務的原子性。 事務處理過程中,如果出現了錯誤或者用戶執 行了 ROLLBACK 語句,MySQL 可以利用 undo log 中的歷史數據將數據恢復到事務開始之前的狀態…

ssh無法直接登入Linux超級用戶root(23/3/3更新)

說明:不允許ssh用超級用戶的身份登入是為了安全性,如果只是學習使用對安全性沒啥要求可以按以下操作解除限制 以普通用戶登錄到服務器后,執行以下命令以編輯 SSH 服務器配置文件 /etc/ssh/sshd_config sudo nano /etc/ssh/sshd_config 此時會…

【C++練級之路】【Lv.10】【STL】priority_queue類和反向迭代器的模擬實現

快樂的流暢:個人主頁 個人專欄:《C語言》《數據結構世界》《進擊的C》 遠方有一堆篝火,在為久候之人燃燒! 文章目錄 一、仿函數1.1 仿函數的介紹1.2 仿函數的優勢 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

【3D Slicer】心臟CT圖像分割操作保姆級教程 Cardiac CT image segmentation

心臟CT圖像分割操作流程指南 1 安裝3D Slicer軟件2 打開文件2.1 從File->Add Data->Choose File2.2 直接拖入 3 進行分割操作4 切片填充 Fill between slices5 第二個例子6 數據保存7 打開保存后的文件 1 安裝3D Slicer軟件 方式二選一 1.官網:3D Slicer 2.百…

JNI方案說明和使用方法介紹

JNI簡介 JNI(Java Native Interface)是Java編程語言中用于實現Java代碼與本地(Native)代碼(通常是C或C++代碼)交互的機制。它允許Java應用程序調用本地代碼中的功能,也可以讓本地代碼調用Java類和方法。JNI在Java平臺上實現了Java與其他編程語言的互操作性。(即可互相…