Итоговый код
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 19 из 66.
Задание
ЛегкоВы получите четыре входных значения, представляющих полный рабочий процесс списка дел: во-первых, список начальных задач, разделенных запятыми; во-вторых, новую задачу для добавления; в-третьих, номер задачи для просмотра (индексация начинается с 1); и в-четвертых, номер задачи для удаления (индексация начинается с 1). Создайте полноценный менеджер списка дел, который обрабатывает все эти операции и отображает конечное состояние.
Требования:
- Прочитайте первый ввод, содержащий описания задач, разделенные запятыми (например,
Buy groceries,Call dentist,Finish homework) - Разделите строку по запятым и создайте изменяемый вектор (mutable vector) с этими начальными задачами
- Прочитайте второй ввод и добавьте эту новую задачу в вектор, используя
.push() - Прочитайте третий ввод, преобразуйте его в целое число (номер задачи для просмотра, начиная с 1)
- Прочитайте четвертый ввод, преобразуйте его в целое число (номер задачи для удаления, начиная с 1)
- Удалите указанную задачу, преобразовав индекс из формата «с 1» в формат «с 0» и используя
.remove() - Выведите
Total tasks: X, где X — итоговое количество задач - Выведите
Viewing task: Y, где Y — номер задачи, которую запрашивали для просмотра - Переберите финальный список задач и выведите каждую задачу с ее номером (начиная с 1)
- Для задачи, номер которой совпадает с номером просмотра (после корректировок удаления), выведите:
[X] [task description] (selected) - Для всех остальных задач выведите:
[X] [task description]
Ввод:
- Первая строка: Описания задач, разделенные запятыми (например,
Buy groceries,Call dentist,Finish homework) - Вторая строка: Новая задача для добавления (например,
Study for exam) - Третья строка: Целое число, представляющее номер задачи для просмотра (индексация с 1)
- Четвертая строка: Целое число, представляющее номер задачи для удаления (индексация с 1)
Вывод:
- Первая строка:
Total tasks: X, где X — итоговое количество задач - Вторая строка:
Viewing task: Y, где Y — запрошенный номер для просмотра - Последующие строки: Каждая задача со своим номером в формате
[X] [task description] - К выбранной задаче (совпадающей с номером просмотра) должно быть добавлено
(selected)
Попробуйте сами
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Прочитать начальные задачи, разделенные запятыми
let initial_tasks = lines.next().unwrap().unwrap();
// Прочитать новую задачу для добавления
let new_task = lines.next().unwrap().unwrap();
// Прочитать номер задачи для просмотра (начиная с 1)
let view_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Прочитать номер задачи для удаления (начиная с 1)
let remove_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// TODO: Напишите свой код ниже
// 1. Разделите initial_tasks по запятым и создайте изменяемый вектор
// 2. Добавьте new_task в вектор
// 3. Удалите задачу по номеру remove_number (преобразуйте в индекс с 0)
// 4. Выведите общее количество задач и информацию о просматриваемой задаче
// 5. Пройдите по финальному списку и выведите каждую задачу
}Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента