タスクの削除
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 18/66。
チャレンジ
簡単3つの入力を受け取ります。1つ目はカンマ区切りの既存のタスクリスト、2つ目は削除するタスク番号(1から始まるインデックス)、3つ目は削除後に追加する新しいタスクです。すべての入力を読み込み、タスクからベクタ(vector)を作成し、指定されたタスクを削除し、新しいタスクを追加して、更新されたタスクリストを表示してください。
要件:
- カンマ区切りのタスク説明(例:
Buy groceries,Call dentist,Finish homework)を含む最初の入力を読み込みます。 - 文字列をカンマで分割して、個々のタスクを取得します。
- 可変(mutable)なベクタを作成し、各タスクをそこに追加します。
- 2番目の入力を読み込み、整数に変換します(削除するタスク番号、1から始まるインデックスを使用)。
- 1から始まるインデックスを0から始まるインデックスに変換し、
.remove()を使用してそのインデックスのタスクを削除します。 - 追加する新しいタスクを含む3番目の入力を読み込みます。
.push()を使用して、新しいタスクをベクタに追加します。- タスクの総数を次の形式で出力します:
Total tasks: X - 各タスクを個別の行に次の形式で出力します:
Task: [task description]
入力:
- 1行目: カンマ区切りのタスク説明(例:
Buy groceries,Call dentist,Finish homework) - 2行目: 削除するタスク番号を表す整数(1から始まるインデックス)
- 3行目: 追加する新しいタスク(例:
Study for exam)
出力:
- 1行目:
Total tasks: X(Xは削除と追加を行った後のタスクの総数) - 続く行: 各タスクを
Task: [task description]として出力
自分で試してみよう
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// カンマ区切りのタスクを読み込む
let tasks_input = lines.next().unwrap().unwrap();
// 削除するタスク番号を読み込む(1から始まるインデックス)
let task_to_remove = lines.next().unwrap().unwrap();
let task_number: usize = task_to_remove.trim().parse().unwrap();
// 追加する新しいタスクを読み込む
let new_task = lines.next().unwrap().unwrap();
// TODO: 以下にコードを記述してください
// tasks_inputをカンマで分割し、可変ベクトルを作成する
// 指定されたインデックスのタスクを削除する(1ベースを0ベースに変換)
// 新しいタスクをベクトルに追加する
// 結果を出力する
// 合計タスク数を次の形式で出力する: Total tasks: X
// 各タスクを次の形式で出力する: Task: [task description]
}