文字列スライスの作成
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 55/66。
String と &str の違いを理解したところで、既存の文字列から文字列スライスを作成する方法を学びましょう。String から &str を作成するには、主に2つの方法があります。
最も簡単な方法は、String に対して参照演算子 & を使用することです。これにより、文字列全体を参照するスライスが作成されます:
let my_string = String::from("Hello World");
let slice: &str = &my_string; // これにより文字列全体のスライスが作成されます範囲構文を使用して、文字列の特定の部分のスライスを作成することもできます。形式は &string[start..end] で、start は開始インデックス、end は含めたい最後の文字の1つ後のインデックスです。これらのインデックスは usize 型です。これはインデックス作成やサイズに使用される Rust の符号なし整数型で、0 または正の値のみを取ることができます。文字列のインデックスが負になることはないため、これは理にかなっています。
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // これにより "Hello" が得られます
let second_word = &my_string[6..11]; // これにより "World" が得られますチャレンジ
簡単2つの入力を受け取ります。最初の入力は完全な文章で、2番目の入力はスライスを作成するための開始インデックスと終了インデックスを表す、スペースで区切られた2つの数字です。最初の入力からStringを作成し、次に2つのインデックスで指定された範囲を使用して文字列スライスを作成します。1行目に元の文字列を、2行目に抽出されたスライスを出力してください。
要件:
- 最初の入力(完全な文章)を読み込み、空白をトリミングする
- この入力から
Stringを作成する - 2番目の入力(スペースで区切られた2つの数字)を読み込み、空白をトリミングする
- 2番目の入力をスペースで分割して、開始インデックスと終了インデックスを取得する
- 両方のインデックスを
usizeにパースする - 範囲構文
&string[start..end]を使用して文字列スライスを作成する - 元の文字列を出力する
- 抽出されたスライスを出力する
入力:
- 1行目: 文章 (例:
Hello World) - 2行目: スペースで区切られた2つの数字 (例:
0 5)
出力:
- 1行目: 元の文字列
- 2行目: 抽出されたスライス
チートシート
Stringから&strを作成するには、主に2つの方法があります。
参照演算子&を使用して、文字列全体のスライスを作成します。
let my_string = String::from("Hello World");
let slice: &str = &my_string;範囲構文&string[start..end]を使用して、特定の部分のスライスを作成します。
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // "Hello"
let second_word = &my_string[6..11]; // "World"startインデックスは含み(inclusive)、endインデックスは含みません(exclusive、最後の文字の1つ後ろ)。
自分で試してみよう
use std::io;
fn main() {
// 最初の入力を読み込む(文全体)
let mut sentence = String::new();
io::stdin().read_line(&mut sentence).expect("Failed to read line");
let sentence = sentence.trim();
// 2番目の入力を読み込む(スペースで区切られた2つの数字)
let mut indices = String::new();
io::stdin().read_line(&mut indices).expect("Failed to read line");
let indices = indices.trim();
// TODO: 以下にコードを記述してください
// インデックスを解析し、文字列スライスを作成します
// 元の文字列とスライスを表示します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。