文字列スライスの作成
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つ後のインデックスです。
let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // これにより "Hello" が得られます
let second_word = &my_string[6..11]; // これにより "World" が得られます範囲構文で使用されるインデックスは usize 型です。これは、サイズやインデックスを表すためのRustの符号なし整数型です。コレクションのインデックスを指定したり、長さを指定したりする必要があるときに使用される標準的な型です。入力からインデックス値をパースする場合、.parse::<usize>() を使用して正しい型に変換します。
チャレンジ
簡単2つの入力を受け取ります。最初の入力は完全な文章で、2番目の入力はスライスを作成するための開始インデックスと終了インデックスを表すスペースで区切られた2つの数字です。最初の入力から String を作成し、次に2つのインデックスで指定された範囲を使用して文字列スライスを作成します。最初の行に元の文字列を、2番目の行に抽出されたスライスを出力してください。
要件:
- 最初の入力(完全な文章)を読み取り、空白をトリミングする
- この入力から
Stringを作成する - 2番目の入力(スペースで区切られた2つの数字)を読み取り、空白をトリミングする
- 2番目の入力をスペースで分割して、開始インデックスと終了インデックスを取得する
- 両方のインデックスを
usizeにパースする - 範囲構文
&string[start..end]を使用して文字列スライスを作成する - 元の文字列を出力する
- 抽出されたスライスを出力する
入力:
- 1行目: 文章 (例:
Hello World) - 2行目: スペースで区切られた2つの数字 (例:
0 5)
出力:
- 1行目: 元の文字列
- 2行目: 抽出されたスライス
自分で試してみよう
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: 以下にコードを記述してください
// インデックスを解析し、文字列スライスを作成する
// 元の文字列とスライスを出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。