日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Rus入门到放弃——字符串与字符切片

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rus入门到放弃——字符串与字符切片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.字符串定義

1.Rust的字符串常常指的是String,str,還是一種是字符串字面值。str是字符切片,通常以&str的方式使用。

//Stringlet r_string:String = String::from("Hello rust string!");//字符字面值定義的strlet r_str = "Hello rust str!";

2.String和&str默認是utf-8編碼格式,而rust內置的char類型是4字節長度的,Unicode字符存儲,所以Rust里面的字符串不能視為char類型的數組,而是更接近u8類型的數,使用utf-8的優點是跟ASCII碼兼容,跟系統的大小端無法,更容易跨平臺。

二.獲取字符

1.因為rust用的utf-8編碼格式,則是不允許使用索引訪問字符串。

let r_string:String = String::from("Hello rust string!");//下標訪問let s1 = r_string[1];

這里會報 Stringcannot be indexed by{integer} 這個錯誤。

2.Rust不實現使用索引的方式是因為字符串索引應該返回的類型是不明確的: 字節值、字符、字形簇或者字符串切片; 使用索引獲取 String 字符的原因是索引操作預期總是需要常數時間 (O(1))。但是對于 String 不可能保證這樣的性能,因為 IDE不得不檢查從字符串的開頭到索引位置的內容來確定這里有多少有效的字符。

3.Rust提供另一種區間訪問字符串的方式,使用索引的區間位置來切割字符。但必須按字符邊界切割。

let e_string = String::from("Hello rust str!"); println!("{}",&e_string[0..1]);

這里會打印出首個字母H,但如果換成中文,這個區間下標就會引起恐慌。

let c_string:String = String::from("現實與理想");println!("{}",&c_string[0..1]);

會報這個錯誤:thread ‘main’ panicked at 'byte index 1 is not a char boundary; it is inside ‘現’ (bytes 0…3) of 現實與理想', src/main.rs:8:20
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace ,因為一個中文字符占三個字節,必須按中文的字符的字符邊界切割。

let c_string:String = String::from("現實與理想"); println!("{}",&c_string[0..3]);

這里會切出 “現”

4.關于區間訪問,rust給了幾個語法糖。

let s = String::from("Hello rust str!");let s1 = &s[..5];//[0..5]let s2 = &s[6..];//[6..(s.len()+1)]let s3 = &s[..];//等于sprintln!("{}\n{}\n{}", s1,s2,s3);

三.字符串之間轉換

//聲明一個字符串切片let r_str:&str = "Hello rust str";//str轉Stringlet r_s1:String = r_str.to_string();//字面值let r_s2:String = "hello".to_string();//String轉strlet s:&str = &r_str;//數字轉Stringlet i = 12;//變量let r_s3:String = i.to_string();//字面值let r_s4:String = 13.to_string();

四.字符串拼接

1.push方法

let mut ss3 =String::from("String literals");//把一個字符切片加到stringss3.push_str(" add string");//附加單個字符,要寫單引號ss3.push('L');

2.使用加號

//加號let as1 = String::from("Hello");let as2 = String::from(" World!");//相加,第一個是原字符,第二是字符引用,相加后,第一個字符就失效(所有權問題)。//第二字符串所有權被保留let as3 = as1 + &as2;

3.format宏相加

//format!相加let fos1 = String::from("one");let fos2 = String::from("two");let fos3 = String::from("three");let fos4 = format!("{} {} {}",fos1,fos2,fos3);println!("{}",fos4);

總結

以上是生活随笔為你收集整理的Rus入门到放弃——字符串与字符切片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。