国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【編程】Rust語(yǔ)言入門(mén)第4篇 字符串

這篇具有很好參考價(jià)值的文章主要介紹了【編程】Rust語(yǔ)言入門(mén)第4篇 字符串。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Rust 中的字符是 Unicode 類(lèi)型,因此每個(gè)字符占據(jù) 4 個(gè)字節(jié)內(nèi)存空間,但字符串不一樣,字符串是 UTF-8 編碼,也就是字符串中的字符所占的字節(jié)數(shù)是變化的(1 - 4)。
常見(jiàn)的字符串有兩種:

  1. str,通常是引用類(lèi)型,&str,即字符串字面常量,字符串切片。
  2. std::string::String
    類(lèi)型&str的變量是被硬編碼的,快速而高效,但不可變;類(lèi)型String,是可設(shè)可變的,它是在堆上的變量,如何管理內(nèi)存,有的語(yǔ)言用垃圾回收機(jī)制(Garbage Collection),標(biāo)記使用情況并自動(dòng)清理;而Rust不愿意用GC,既要高性能,又要高安全性,提出變量離開(kāi)作用域即自動(dòng)釋放其占用的內(nèi)存,比GC思路更妙。
    C語(yǔ)言中清理內(nèi)存的函數(shù)free,要被手動(dòng)調(diào)用;Rust中則是drop(),Rust自動(dòng)調(diào)用。
    C++中的Resoure Acquisition Is Initialization,RAII模型。

兩種字符串類(lèi)型互轉(zhuǎn)

&str轉(zhuǎn)String:

let a = String::from("hello, world");
"hello, world".to_string();

String轉(zhuǎn)&str,引用即可

fn main() {
    let s = String::from("hello,world!");
    say_hello(&s);
    say_hello(&s[..]);
    say_hello(s.as_str());
}

fn say_hello(s: &str) {
    println!("{}",s);
}

除上述兩種類(lèi)型,Rust標(biāo)準(zhǔn)庫(kù)還有其他類(lèi)型的字符串。

字符串不能被直接索引

Rust字符串不允許索引操作。由于不同字符占用字節(jié)數(shù)不等,考慮操作時(shí)間復(fù)雜度不能實(shí)現(xiàn)O(1)。

//三個(gè)字節(jié)
let a = "中國(guó)人";
//一個(gè)字節(jié)
let b = "Chinese";

Rust字符串雖然不能索引但可以切片(slice),類(lèi)似Python等語(yǔ)言中的切片概念。

fn main() {
    let my_name = "kirk zhang";
    let first_name = &my_name[0..4];
    let last_name = &my_name[5..10];
    println!("{}",first_name);
    println!("{}",last_name);
    greet(String::from(my_name));
    // 嘗試my_name[0]報(bào)錯(cuò),不過(guò)可以用.chars().nth或.bytes()來(lái)實(shí)現(xiàn)
    println!("can str be indexed {:?}",my_name.chars().nth(0));
}

fn greet(name: String){
    println!("hello {}", name);
}

小心字符串切片

注意字符串切片是按字節(jié)來(lái)的哦,而Rust字符串是UTF-8協(xié)議格式,一般1個(gè)字符1個(gè)字節(jié),但1個(gè)中文字符占3個(gè)字節(jié);如果切片起止不在字符邊界,則有異常。

fn main(){
    let f = "中國(guó)人";
    let f1 = &f[0..5];
    println!("watch out, what you got {}",f1);
}

提示:thread ‘main’ panicked at ‘byte index 5 is not a char boundary; it is inside ‘國(guó)’ (bytes 3…6) of 中國(guó)人’, src/main.rs:10:15
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

字符串的操作

替換

replace(要被替換的子串,新字符串),返回結(jié)果字符串。

    let word = String::from("rust");
    let new_word = word.replace("r","R");
    println!("{}", new_word);

插入

insert(位置索引,字符)、insert_str(位置索引,字符串):變量本身變化,聲明時(shí)要mut。

    let word = String::from("rust");
    let mut new_word = word.replace("r","R");
    new_word.insert_str(0, "I love ");
    println!("{}", new_word);

追加

push(字符)
push_str(字符串)

    let word = String::from("rust");
    let mut new_word = word.replace("r","R");
    new_word.insert_str(0, "I love ");
    new_word.push('!');
    println!("{}", new_word);   

連接

++= 調(diào)用了String的add(self,&str)方法,其定義要求+后面的參數(shù)為字符串字面常量,返回String類(lèi)型。
或用format! ,適用于 String 和 &str 。format! 的用法與 println! 的用法類(lèi)似。

let a1 = String::from("tic");
let a2 = String::from("tac");
let a3 = String::from("toe");

// 經(jīng)過(guò)下面一行后,a1被釋放了,不能再使用!a2、a3依然存在。
let s = s1 + "-" + &s2 + "-" + &s3;

刪除

有4個(gè)方法,pop()、remove(索引位置)、truncate(起始位置)、clear()
注意刪除字符串的索引必須是字符串中字符的邊界,否則錯(cuò)誤。

fn main() {
    let mut string_remove = String::from("測(cè)試remove方法");
    println!(
        "string_remove 占 {} 個(gè)字節(jié)",
        std::mem::size_of_val(string_remove.as_str())
    );
    // 刪除第一個(gè)漢字
    string_remove.remove(0);
    // 下面代碼會(huì)發(fā)生錯(cuò)誤
    // string_remove.remove(1);
    // 直接刪除第二個(gè)漢字
    // string_remove.remove(3);
    dbg!(string_remove);
}

字符串的字符與字節(jié)

例,文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-829519.html

   for c in "中國(guó)人".chars() {
       println!("{}", c);
   }
   for b in "中國(guó)人".bytes() {
       println!("{}", b);
   }

到了這里,關(guān)于【編程】Rust語(yǔ)言入門(mén)第4篇 字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • rust 字符串(String)詳解

    rust 字符串(String)詳解

    rust中的 String ,是一個(gè)非常常用的 crate ,它的底層涉及到了rust中的所有權(quán)概念,不過(guò)這不是本章的內(nèi)容,如果對(duì)rust所有權(quán)概念感興趣的,可以查看另一篇文章:rust所有權(quán) 本文的目的還是介紹 String 的基本用法,以及有哪些常用的函數(shù)可以使用 字符串,也就是由一系列字符

    2024年02月03日
    瀏覽(37)
  • 30天拿下Rust之字符串

    概述 ????????在Rust中,字符串是一種非常重要的數(shù)據(jù)類(lèi)型,用于處理文本數(shù)據(jù)。Rust的字符串是以UTF-8編碼的字節(jié)序列,主要有兩種類(lèi)型:str和String。其中,str是一個(gè)對(duì)字符數(shù)據(jù)的不可變引用,更像是對(duì)現(xiàn)有字符串?dāng)?shù)據(jù)的“視圖”,而String則是一個(gè)獨(dú)立、可變更的字符串實(shí)

    2024年03月12日
    瀏覽(16)
  • rust里如何判斷字符串是否相等呢?

    在 Rust 中,有幾種方法可以判斷字符串是否相等。下面是其中幾種常見(jiàn)的方法: 使用 == 運(yùn)算符:可以直接使用 == 運(yùn)算符比較兩個(gè)字符串是否相等。例如: 這段代碼會(huì)輸出 “字符串不相等”,因?yàn)?str1 和 str2 不是相同的字符串。 2. 使用 eq 方法:字符串類(lèi)型實(shí)現(xiàn)了 PartialEq

    2024年02月14日
    瀏覽(129)
  • Rust字符串:安全、高效和靈活的數(shù)據(jù)類(lèi)型

    Rust字符串:安全、高效和靈活的數(shù)據(jù)類(lèi)型

    Rust是一種現(xiàn)代的系統(tǒng)級(jí)編程語(yǔ)言,以其出色的內(nèi)存安全性和高性能而受到廣泛關(guān)注。在Rust中,字符串是一種重要的數(shù)據(jù)類(lèi)型,它具有獨(dú)特的特點(diǎn),使其在處理文本和字符數(shù)據(jù)時(shí)成為理想的選擇。本文將深入探討Rust字符串的特性,包括安全性、高效性和靈活性,以幫助您更好

    2024年01月19日
    瀏覽(23)
  • Rust中的字符串處理及相關(guān)方法詳解

    在Rust中,字符串是一種非常重要的數(shù)據(jù)類(lèi)型,而 String 類(lèi)型則提供了對(duì)動(dòng)態(tài)可變字符串的支持。本文將介紹一些常見(jiàn)的字符串處理方法以及相關(guān)示例代碼。 在Rust中,有多種方式創(chuàng)建字符串,以下是一些常見(jiàn)的例子: push_str()方法 push_str() 方法用于將一個(gè)字符串切片附加到 S

    2024年02月19日
    瀏覽(19)
  • 算法leetcode|87. 擾亂字符串(rust重拳出擊)

    使用下面描述的算法可以擾亂字符串 s 得到字符串 t : 如果字符串的長(zhǎng)度為 1 ,算法停止 如果字符串的長(zhǎng)度 1 ,執(zhí)行下述步驟: 在一個(gè)隨機(jī)下標(biāo)處將字符串分割成兩個(gè)非空的子字符串。即,如果已知字符串 s ,則可以將其分成兩個(gè)子字符串 x 和 y ,且滿(mǎn)足 s = x + y 。 隨機(jī)

    2024年02月05日
    瀏覽(51)
  • 沒(méi)有jodatime,rust里怎么將字符串轉(zhuǎn)為日期呢?

    在 Rust 中,有多種方法可以在時(shí)間和字符串之間進(jìn)行轉(zhuǎn)換。以下是五種常見(jiàn)的方式:

    2024年02月14日
    瀏覽(18)
  • Rust 標(biāo)準(zhǔn)庫(kù)字符串類(lèi)型String及其46種常用方法

    Rust 標(biāo)準(zhǔn)庫(kù)字符串類(lèi)型String及其46種常用方法

    Rust主要有兩種類(lèi)型的字符串:str和String str 由[u8]表示,UTF-8編碼的字符串的引用,字符串字面值,也稱(chēng)作字符串切片。&str用于查看字符串中的數(shù)據(jù)。它的大小是固定的,即它不能調(diào)整大小。 String String 類(lèi)型來(lái)自標(biāo)準(zhǔn)庫(kù),它是可修改、可變長(zhǎng)度、可擁有所有權(quán)的同樣使用UTF

    2024年02月07日
    瀏覽(42)
  • Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

    Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

    目錄 84. 柱狀圖中最大的矩形 Largest-rectangle-in-histogram???????? 85. 最大矩形 Maximal Rectangle???????? 87. 擾亂字符串 Scramble String???????? ?? 每日一練刷題專(zhuān)欄??? Rust每日一練 專(zhuān)欄 Golang每日一練 專(zhuān)欄 Python每日一練 專(zhuān)欄 C/C++每日一練 專(zhuān)欄 Java每日一練 專(zhuān)欄 給定? n

    2024年02月09日
    瀏覽(30)
  • 【零基礎(chǔ)學(xué)Rust | 基礎(chǔ)系列 | 數(shù)據(jù)結(jié)構(gòu)】元組,數(shù)組,向量,字符串,結(jié)構(gòu)體

    【零基礎(chǔ)學(xué)Rust | 基礎(chǔ)系列 | 數(shù)據(jù)結(jié)構(gòu)】元組,數(shù)組,向量,字符串,結(jié)構(gòu)體

    在Rust編程語(yǔ)言中,數(shù)據(jù)結(jié)構(gòu)是組織和存儲(chǔ)數(shù)據(jù)的一種方式,它們使得數(shù)據(jù)可以高效地被訪(fǎng)問(wèn)和操作。本章將詳細(xì)介紹元組,數(shù)組,向量,字符串,和結(jié)構(gòu)體這幾種基本的數(shù)據(jù)結(jié)構(gòu)。 元組是Rust編程語(yǔ)言中的一種復(fù)合數(shù)據(jù)類(lèi)型,它可以包含多個(gè)值,這些值可以是不同類(lèi)型。元組

    2024年02月11日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包