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ówMoż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.
Wyzwanie
ŁatwyOtrzymasz 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
Stringz 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
}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
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kod6Obsługa braku wartości za pomocą „Option”
Czym jest „Option”?Używanie „match” z „Option”is_some() i is_none()Rozpakowywanie „Option”Metoda expectPodawanie wartości domyślnej: unwrap_orPodsumowanie – znajdowanie elementu9Wycinki napisów i więcej
String a &strTworzenie wycinków napisówWycinki jako parametry funkcjiInne wycinkiPodsumowanie — znajdowanie pierwszego słowaPoćwicz samodzielnie: Kompilator Rust online