Создание срезов строк
Часть раздела 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"Задание
ЛегкоВы получите два входных значения. Первое значение — это полное предложение, а второе — два числа, разделенных пробелом, представляющих начальный и конечный индексы для создания среза. Создайте 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: Напишите свой код ниже
// Разберите индексы и создайте срез строки
// Выведите исходную строку и срез
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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Итоги: поиск элемента9Срезы строк и не только
String и &strСоздание срезов строкСрезы как параметры функцийДругие срезыИтоги: поиск первого слова