Menu
Coddy logo textTech

Tworzenie wycinków napisów

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 55 z 66.

Skoro rozumiesz już różnicę między String a &str, nauczmy się tworzyć wycinki ciągów znaków z istniejących ciągów. Istnieją dwa główne sposoby tworzenia &str z String.

Najprościej użyć operatora referencji & z wartością String. Tworzy to wycinek odwołujący się do całego ciągu znaków:

let my_string = String::from("Hello World");
let slice: &str = &my_string; // To tworzy wycinek całego ciągu znaków

Możesz także tworzyć wycinki określonych części ciągu znaków, używając składni zakresu. Format to &string[start..end], gdzie start to indeks początkowy, a end to indeks o jeden większy niż indeks ostatniego znaku, który chcesz uwzględnić:

let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // To daje nam "Hello"
let second_word = &my_string[6..11]; // To daje nam "World"

Indeksy używane w składni zakresów są typu usize, który jest bez znaku typem całkowitym w Rust, służącym do reprezentowania rozmiarów i indeksów. To standardowy typ używany przy indeksowaniu elementów kolekcji lub określaniu jej długości. Podczas analizowania wartości indeksów z danych wejściowych użyjesz .parse::<usize>(), aby przekonwertować je na właściwy typ.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa dane wejściowe. Pierwsze to pełne zdanie, a drugie to dwie liczby oddzielone spacją, określające indeksy początkowy i końcowy do utworzenia wycinka. Utwórz String z pierwszego wejścia, a następnie utwórz wycinek ciągu znaków przy użyciu zakresu określonego przez oba indeksy. Wypisz oryginalny ciąg w pierwszym wierszu, a wyodrębniony wycinek w drugim.

Wymagania:

  • Odczytaj pierwsze dane wejściowe (pełne zdanie) i usuń białe znaki z początku i końca
  • Utwórz String z tych danych wejściowych
  • Odczytaj drugie dane wejściowe (dwie liczby oddzielone spacją) i usuń białe znaki z początku i końca
  • Podziel drugie dane wejściowe według spacji, aby uzyskać indeks początkowy i końcowy
  • Przekonwertuj oba indeksy na typ usize
  • Utwórz wycinek ciągu znaków, używając składni zakresu &string[start..end]
  • Wypisz oryginalny ciąg
  • Wypisz wyodrębniony wycinek

Dane wejściowe:

  • Pierwszy wiersz: zdanie (np. Hello World)
  • Drugi wiersz: dwie liczby oddzielone spacją (np. 0 5)

Dane wyjściowe:

  • Pierwszy wiersz: oryginalny ciąg
  • Drugi wiersz: wyodrębniony wycinek

Spróbuj swoich sił

use std::io;

fn main() {
    // Wczytaj pierwsze dane wejściowe (całe zdanie)
    let mut sentence = String::new();
    io::stdin().read_line(&mut sentence).expect("Failed to read line");
    let sentence = sentence.trim();
    
    // Wczytaj drugie dane wejściowe (dwie liczby oddzielone spacją)
    let mut indices = String::new();
    io::stdin().read_line(&mut indices).expect("Failed to read line");
    let indices = indices.trim();
    
    // TODO: Napisz swój kod poniżej
    // Przeanalizuj indeksy i utwórz wycinek łańcucha znaków
    
    
    // Wypisz oryginalny łańcuch znaków i jego wycinek
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online