Menu
Coddy logo textTech

Создание срезов строк

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 55 из 66.

Теперь, когда вы понимаете разницу между String и &str, давайте узнаем, как создавать срезы строк из существующих строк. Существует два основных способа создания &str из String.

Самый простой способ — использовать оператор ссылки & с вашим String. Это создает срез, который ссылается на всю строку:

let my_string = String::from("Hello World");
let slice: &str = &my_string; // Это создает срез всей строки

Вы также можете создавать срезы определенных частей строки, используя синтаксис диапазонов. Формат записи — &string[start..end], где start — это начальный индекс, а end — индекс, следующий за последним символом, который вы хотите включить. Эти индексы имеют тип usize, который является беззнаковым целочисленным типом в Rust, используемым для индексации и размеров — он может быть только нулевым или положительным, что логично, так как индекс строки никогда не может быть отрицательным:

let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // Это дает нам "Hello"
let second_word = &my_string[6..11]; // Это дает нам "World"
challenge icon

Задание

Легко

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

Требования:

  • Прочитайте первое входное значение (полное предложение) и удалите лишние пробелы
  • Создайте String из этого входного значения
  • Прочитайте второе входное значение (два числа, разделенных пробелом) и удалите лишние пробелы
  • Разделите второе входное значение по пробелу, чтобы получить начальный и конечный индексы
  • Преобразуйте оба индекса в тип usize
  • Создайте срез строки, используя синтаксис диапазона &string[start..end]
  • Выведите исходную строку
  • Выведите извлеченный срез

Ввод:

  • Первая строка: Предложение (например, Hello World)
  • Вторая строка: Два числа, разделенных пробелом (например, 0 5)

Вывод:

  • Первая строка: Исходная строка
  • Вторая строка: Извлеченный срез

Шпаргалка

Существует два основных способа создания &str из String.

Используйте оператор взятия ссылки &, чтобы создать срез всей строки:

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 включителен, а индекс end исключителен (на один символ больше последнего).

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

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();
    
    // Чтение второго ввода (два числа, разделенных пробелом)
    let mut indices = String::new();
    io::stdin().read_line(&mut indices).expect("Failed to read line");
    let indices = indices.trim();
    
    // TODO: Напишите свой код ниже
    // Разберите индексы и создайте срез строки
    
    
    // Выведите исходную строку и срез
}
quiz iconПроверьте себя

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

Все уроки раздела Logic & Flow