問題一覧に戻る
初級所有権
問題34: 文字列スライス

&str型は文字列スライスと呼ばれ、文字列の一部(または全体)への参照です。String型から&strを作成でき、範囲指定で部分文字列を参照できます。文字列リテラルも&str型です。スライスは所有権を持たず、元の文字列を借用します。関数の引数や戻り値でよく使われます。

fn main() {
let s = String::from("hello world");

// 全体のスライス
let slice: = &s;
println!("Full slice: {}", slice);

// 範囲指定スライス
let hello = &s[05];
let world = &s[6];

println!("First word: {}", hello);
println!("Second word: {}", world);

// 文字列スライスを返す関数
fn first_word(s: &String) -> {
let bytes = s.as_bytes();

for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}

println!("First: {}", first_word(&s));
}