Menu
Coddy logo textTech

Другие срезы

Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 57 из 66.

Хотя срезы строк очень полезны, slicing не ограничивается только строками. Концепция срезов Rust распространяется на любую последовательность элементов, что делает её мощным инструментом для работы с коллекциями без получения владения.

Вы можете создавать срезы из массивов и векторов, используя тот же синтаксис, который вы изучили для строк. Например, если у вас есть массив numbers, вы можете создать срез, который ссылается на его часть или весь массив:

let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Это даёт нам [2, 3, 4]
let full_slice: &[i32] = &numbers;  // Это ссылается на весь массив

Тот же принцип работает с векторами. Вы можете создать срезы из векторов, чтобы работать с частями data, не перемещая и не копируя их:

let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Это даёт нам [10, 20]
challenge icon

Задание

Легко

Вы получите три входных значения. Первое входное значение — это список чисел, разделённых запятыми. Второе входное значение — это два числа, разделённых пробелом, которые обозначают начальный и конечный индексы для создания среза. Третье входное значение — это одно число, обозначающее индекс для доступа к элементу среза.

Create вектор из чисел, разделённых запятыми, затем Create срез, используя specified диапазон. Получите доступ к element по заданному индексу из среза и выведите его.

Требования:

  • Read первое входное значение (числа, разделённые запятыми) и удалите пробельные символы
  • Split входное значение по запятым и Parse каждое число в i32
  • Create вектор из этих чисел
  • Read второе входное значение (два числа, разделённые пробелом) и удалите пробельные символы
  • Split второе входное значение по пробелу, чтобы получить start и end indices
  • Parse оба индекса в usize
  • Create срез из вектора, используя синтаксис диапазона &vec[start..end]
  • Read третье входное значение (index для доступа) и удалите пробельные символы
  • Parse index в usize
  • Получите доступ к element по specified индексу из среза
  • Print полученный element

Входные данные:

  • Первая строка: числа, разделённые запятыми (например, 10,20,30,40,50)
  • Вторая строка: два числа, разделённые пробелом (например, 1 4)
  • Третья строка: число-индекс (например, 2)

Выходные данные:

  • element по specified индексу из среза

Попробуйте сами

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Прочитать первый ввод (числа, разделённые запятыми)
    let first_input = lines.next().unwrap().unwrap();
    
    // Прочитать второй ввод (начальный и конечный индексы)
    let second_input = lines.next().unwrap().unwrap();
    
    // Прочитать третий ввод (индекс для доступа)
    let third_input = lines.next().unwrap().unwrap();
    
    // TODO: Напишите ваш код ниже
    // Разобрать числа, разделённые запятыми, и создать вектор
    // Разобрать начальный и конечный индексы
    // Создать срез из вектора
    // Получить доступ к элементу по указанному индексу из среза
    
    // Вывести результат
    // println!("{}", result);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Rust